重复符号问题

时间:2010-08-09 10:44:25

标签: c++ namespaces

我有一个头文件MyNameSpace.h,我在下面使用命名空间:

namespace NameSpace1

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

namespace NameSpace2

{
string top = "Top";
}

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

3 个答案:

答案 0 :(得分:15)

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

EG。在MyNameSpace.h中你可以:

namespace NameSpace1 {
    extern std::string first;
}

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

namespace NameSpace1 {
    std::string first = "First";
}

答案 1 :(得分:0)

首先,不能有命名空间对象,不能从命名空间中创建对象。它仅用于名称解析。关于多重定义问题,您很可能错过了头文件的include guard

答案 2 :(得分:0)

@reko_t:包含保护对多个变量定义没有帮助,因为包含保护仅保护每个单个编译单元的多个包含(例如,源文件)。

这实际上不是在阻止多个定义吗?