从vs2012升级vs2015后报错error C2872: “array”: 不明确的符号

chyzh2012 2018-09-07 09:29:18
从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 个 ==========
...全文
683 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
@风轻云淡_ 2018-09-08
  • 打赏
  • 举报
回复
std命名空间里面已经定义了array了,你需要换个名字,或者在定义自己的这个array之前,不要使用using namespace std;
Arnis1973 2018-09-08
  • 打赏
  • 举报
回复
你用了C++保留字或是某个命名空间的关键字(std::array),将array重命名为另外一个名称可以解决这个问题。
wallesyoyo 2018-09-08
  • 打赏
  • 举报
回复
编译信息已经告诉你了呀,你的 array 和标准库里的 std::array 命名冲突了,std::array是C++11里新引入的,另外不要轻易使用using namespace std;

64,439

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧