我有一个头文件MyNameSpace.h,在其中我使用命名空间,如下所示:
namespace NameSpace1
{
string first = "First";
...
}
namespace NameSpace2
{
string top = "Top";
}
但是,当我在其他类(包括头文件)中使用名称空间对象时。我得到重复的符号错误为NameSpace1 :: first。它的确切含义以及如何解决此解决方案。
最佳答案
您不应该在标头中定义全局变量,而是需要使用extern
关键字告诉编译器它是在其他位置定义的。否则,编译器将尝试在每个包含标头的源文件中定义变量。
例如。在MyNameSpace.h中,您可以执行以下操作:
namespace NameSpace1 {
extern std::string first;
}
然后,您将在MyNameSpace.cpp中执行此操作:
namespace NameSpace1 {
std::string first = "First";
}