尝试在名称空间中声明变量时,从Visual Studio中获取错误C2086,在一个代码文件中定义它并在另一个代码文件中访问它。
使用gcc(来自codeblocks)构建时,错误是
(... =我的硬盘上的路径):
... file_one.cpp | 2 |错误:重新定义'RecvVarProxyFn Skins :: fnSequenceProxyFn'
... file_one.h | 4 |注意:'RecvVarProxyFn Skins :: fnSequenceProxyFn'先前在这里声明
即使停用(使用//
)main()中的访问行,错误也是一样。
file_one.h:
typedef int RecvVarProxyFn;
namespace Skins {
RecvVarProxyFn fnSequenceProxyFn; // "previously declared here"
}
file_one.cpp
#include "file_one.h"
RecvVarProxyFn Skins::fnSequenceProxyFn = 0; // redefinition error 2086
的main.cpp
#include "file_one.h"
int main()
{ Skins::fnSequenceProxyFn = 1; // making this a comment does not help
return 0;
}
为什么我尝试在单独的代码文件中定义变量时会出现重新定义错误?
注意:
我正在使用设置为版本8.1
的visual studio 2015 Target Platform
和平台工具集设置为v140
。
答案 0 :(得分:0)
使用关键字extern
将其中一个定义更改为声明
显然标题中的行是第一选择。
namespace Skins {
extern RecvVarProxyFn fnSequenceProxyFn;
}