【发布时间】:2015-11-06 02:15:49
【问题描述】:
我正在尝试定义可以在 cpp 文件中使用的常量字符串,这样既不能修改数据,也不能修改指针。链接器抱怨以下内容:
main.obj:错误 LNK2001:未解析的外部符号“char const * const g_someString"
示例代码:
//constants.h
extern const char * const g_someString;
//constants.cpp
const char * const g_someString = "Hello";
// main.cpp
int main()
{
strcmp(g_someString, "Hello");
}
当 const char * const 被 const char * 替换时,不会发生这种情况。编译器(MSVC 2015)是否优化了 constants.cpp 中的 g_someString 定义?
【问题讨论】:
-
链接器错误随着 constants.cpp 中定义之前的 extern 声明而消失
-
确保
constants.cpp包含constants.h(并且您没有循环依赖) -
void main在 C++ 中是非法的,即使您的编译器提供了不符合标准的扩展,编写依赖于此类扩展的代码也不好 -
@M.M:我认为也许我们应该修复所有那些
void main,除了评论,在问题不相关的情况下。