【发布时间】:2014-09-02 02:37:58
【问题描述】:
我在 VS 2010 中处理了这种奇怪的(对我而言)效果。 请聪明的人解释一下。
//Header.h
#include <string>
namespace MySpace {
extern const std::string SOME_CONST_STRING;
}
//Implementation.cpp
#include "Header.h"
using namespace MySpace;
const std::string SOME_CONST_STRING = "CONST_STRING_VALUE";
这会导致链接器输出错误 LNK2001: unresolved external symbol const MySpace::SOME_CONST_STRING。
但是,当我像这样更改 Implementation.cpp 时:
//Implementation.cpp
#include "Header.h"
namespace MySpace {
const std::string SOME_CONST_STRING = "CONST_STRING_VALUE";
}
代码构建正常。
在 cpp 文件中定义命名空间而不是使用它是一个很好的例子吗?
【问题讨论】:
-
我不明白你的最后一个问题,恐怕。
-
cpp中的SOME_CONST_STRING也需要extern。
-
两个版本的 Implementation.cpp 的唯一区别是使用命名空间 MySpace; vs 命名空间 MySpace { ... }。第一个链接失败,第二个链接正常。
-
约瑟夫。我在“编码风格”问题中看到了它:在 cpp 文件中编写它的首选方式是什么:使用命名空间 MySpace; vs 命名空间 MySpace { ... }。很少有哪个例子比另一个更好。我在问上面的问题是否是不使用命名空间 MySpace 编写的充分理由;在实现 cpp 文件中?
标签: c++