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/