我有一个头文件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";
}

08-17 02:30
查看更多