c++在命名空间中共享变量时出现重复符号链接(symbolic link)器错误

标签 c++ linker global-variables extern

C++ 还是比较新的

我有一个带有 namespace 的 header 变量,其中有一些常量,看起来像这样

namespace blah {
    const std::string x="foo";
}

我可以通过这种方式访问​​变量 - dosomething(blah::x);等。现在我想更改变量,以便可以对其进行修改。如果我只是取出常量,我会收到链接器错误“重复符号 blah::x”。在这里添加一个 extern 没有帮助:

namespace blah {
    extern std::string x;
} 

它说 extern 默认启用,我得到相同的重复符号错误。执行此操作的正确方法是什么?

(在后一种情况下编辑,我还不想设置变量值。我想在别处导出它并共享值。澄清一下 - 我想摆脱 const 以便我可以更改值(例如,使用命令行参数。当我摆脱 const 时,我得到了关于重复符号的错误。)

最佳答案

在头文件中,您应该声明变量:

//blah.h
namespace blah {
   extern std::string x; //declaration
}

并且在源文件中,您应该定义它为:

//blah.cpp
#include "blah.h"
namespace blah {
    std::string x="foo"; //definition
}

现在将 blah.h 包含在任意数量的文件中。您不会看到任何重定义错误。

如果你想摆脱 const(正如你在评论中所说的那样),那么只需像我一样将其删除。

关于c++在命名空间中共享变量时出现重复符号链接(symbolic link)器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7434976/

相关文章:

c++ - rapidjson - 更改对象 - 添加元素/项目

c++ - 将所有权转让给经理

c++ - 在不同的时间传递不同的参数

c++ - 在 OSX 上更新 GCC

c++ - 当在其中定义全局变量时,如何在 .cpp 中包含 C 风格的 .h?

perl - 催化剂应用范围变量

c++ - 在另一个库中链接一个库,仍然必须在最终项目中链接它

c++ - 修改 Makefile 以包含库并使用 C++11

c++ - 在 make 文件中链接 g++ 和 lib 不起作用

c++ - 不理解通过函数传递的 C++ 参数