尝试在命名空间中声明和定义变量时重新定义错误C2086

时间:2017-12-04 16:24:15

标签: c++ visual-studio visual-c++

尝试在名称空间中声明变量时,从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

1 个答案:

答案 0 :(得分:0)

使用关键字extern将其中一个定义更改为声明 显然标题中的行是第一选择。

namespace Skins {
    extern RecvVarProxyFn fnSequenceProxyFn;
}