重复符号问题

boo*_*oom 0 c++ namespaces

我有一个头文件MyNameSpace.h,我使用命名空间,如下所示:

namespace NameSpace1

{
string first = "First";
...
}

namespace NameSpace2

{
string top = "Top";
}
Run Code Online (Sandbox Code Playgroud)

但是当我在包括头文件在内的其他类中使用命名空间对象时.我得到了NameSpace1 :: first的重复符号错误.具体含义以及如何解决此解决方案.

rek*_*o_t 15

你不应该在头文件中定义全局变量,你需要告诉编译器它在别处用extern关键字定义.否则,编译器会尝试在包含标头的每个源文件中定义变量.

例如.在MyNameSpace.h中你做了:

namespace NameSpace1 {
    extern std::string first;
}
Run Code Online (Sandbox Code Playgroud)

然后你将在MyNameSpace.cpp中执行此操作:

namespace NameSpace1 {
    std::string first = "First";
}
Run Code Online (Sandbox Code Playgroud)