从vs2012升级vs2015后,原来能编译的程序,出现不明确的符号的错误,查了很久,有说是明明冲突,可就是照不出来,用vs2012的时候还好好的。到底是哪里的问题,望高手解答。
报错文件的源码?
#ifndef ARRAY_H_INCLUDED // -*- C++ -*-
#define ARRAY_H_INCLUDED
#include <string.h>
#include "geometry.h"
template<class T>
class array {
protected:
T *data;
int len;
public:
array() { data=NULL; len=0; }
array(int l) { init(l); }
~array() { free(); }
inline void init(int l);
inline void free();
inline void resize(int l);
inline T& ref(int i);
inline T& operator[](int i) { return data[i]; }
inline T& operator()(int i) { return ref(i); }
inline const T& ref(int i) const;
inline const T& operator[](int i) const { return data[i]; }
inline const T& operator()(int i) const { return ref(i); }
inline int length() const { return len; }
inline int maxLength() const { return len; }
};
template<class T>
inline void array<T>::init(int l)
{
data = new T[l];
len = l;
}
template<class T>
inline void array<T>::free()
{
if( data )
{
delete[] data;
data = NULL;
}
}
template<class T>
inline T& array<T>::ref(int i)
{
return data[i];
}
template<class T>
inline const T& array<T>::ref(int i) const
{
return data[i];
}
template<class T>
inline void array<T>::resize(int l)
{
T *old = data;
data = new T[l];
data = (T *)memcpy(data,old,MIN(len,l)*sizeof(T));
len = l;
delete[] old;
}
// ARRAY_H_INCLUDED
#endif
报错信息:
1>------ 已启动生成: 项目: Simplifier, 配置: Debug Win32 ------
1> Mesh.cpp
1>Mesh.cpp(110): warning C4996: 'fscanf': This function or variable may be unsafe. Consider using fscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\stdio.h(1193): note: 参见“fscanf”的声明
1>Mesh.cpp(148): warning C4996: 'fscanf': This function or variable may be unsafe. Consider using fscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\stdio.h(1193): note: 参见“fscanf”的声明
1>Mesh.cpp(159): warning C4996: 'fscanf': This function or variable may be unsafe. Consider using fscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\stdio.h(1193): note: 参见“fscanf”的声明
1> Heap.cpp
1>d:\workspace\vs\basicprogram\Array.h(36): error C2872: “array”: 不明确的符号
1> d:\workspace\vs\basicprogram\Array.h(8): note: 可能是“array”
1> D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\utility(363): note: 或 “std::array”
1> d:\workspace\vs\basicprogram\Array.h(37): note: 编译类 模板 成员函数“void array<heap_node>::init(int)”时
1> d:\workspace\vs\basicprogram\Array.h(14): note: 参见对正在编译的函数 模板 实例化“void array<heap_node>::init(int)”的引用
1> d:\workspace\vs\basicprogram\Heap.h(45): note: 参见对正在编译的类 模板 实例化“array<heap_node>”的引用
1>d:\workspace\vs\basicprogram\Array.h(43): error C2872: “array”: 不明确的符号
1> d:\workspace\vs\basicprogram\Array.h(8): note: 可能是“array”
1> D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\utility(363): note: 或 “std::array”
1> d:\workspace\vs\basicprogram\Array.h(44): note: 编译类 模板 成员函数“void array<heap_node>::free(void)”时
1> d:\workspace\vs\basicprogram\Array.h(15): note: 参见对正在编译的函数 模板 实例化“void array<heap_node>::free(void)”的引用
1>d:\workspace\vs\basicprogram\Array.h(65): error C2872: “array”: 不明确的符号
1> d:\workspace\vs\basicprogram\Array.h(8): note: 可能是“array”
1> D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\utility(363): note: 或 “std::array”
1> d:\workspace\vs\basicprogram\Array.h(66): note: 编译类 模板 成员函数“void array<heap_node>::resize(int)”时
1> Heap.cpp(50): note: 参见对正在编译的函数 模板 实例化“void array<heap_node>::resize(int)”的引用
1>d:\workspace\vs\basicprogram\Array.h(53): error C2872: “array”: 不明确的符号
1> d:\workspace\vs\basicprogram\Array.h(8): note: 可能是“array”
1> D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\utility(363): note: 或 “std::array”
1> d:\workspace\vs\basicprogram\Array.h(54): note: 编译类 模板 成员函数“heap_node &array<heap_node>::ref(int)”时
1> d:\workspace\vs\basicprogram\Heap.h(71): note: 参见对正在编译的函数 模板 实例化“heap_node &array<heap_node>::ref(int)”的引用
1> 正在生成代码...
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========