c – 全局const char上的错误LNK1169 *
发布时间:2020-12-16 03:37:59 所属栏目:百科 来源:网络整理
导读:我在使用Visual Studio 2010和C时遇到了一些奇怪的行为. 我有一个头文件,我在其中声明了一些全局常量 #ifndef CONSTANTS_H#define CONSTANTS_H#define WIN32_LEAN_AND_MEAN// Macros...#define SAFE_RELEASE(ptr) { if (ptr) { ptr-Release(); ptr = NULL }
我在使用Visual Studio 2010和C时遇到了一些奇怪的行为.
我有一个头文件,我在其中声明了一些全局常量 #ifndef CONSTANTS_H #define CONSTANTS_H #define WIN32_LEAN_AND_MEAN // Macros... #define SAFE_RELEASE(ptr) { if (ptr) { ptr->Release(); ptr = NULL } } #define SAFE_DELETE(ptr) { if (ptr) { delete ptr; ptr = NULL; } } // Constants... const char* CLASS_NAME = "WinMain"; const char GAME_TITLE[] = "DirectX Window"; const int GAME_WIDTH = 640; const int GAME_HEIGHT = 480; #endif 我的问题来自以下行: const char* CLASS_NAME = "WinMain"; 当它是这样的,我构建我的解决方案时,我得到以下2个错误: 错误LNK1169:找到一个或多个多重定义的符号,和 错误LNK2005:“char const * const CLASS_NAME”(?CLASS_NAME @@ 3PBDB)已在graphics.obj中定义 现在很奇怪,因为运行’在文件中查找’,我绝对不会在其他地方声明它,即没有重复的声明. 我应该把它改成: const char* const CLASS_NAME = "WinMain"; 要么 const char CLASS_NAME[] = "WinMain"; 它编译得很好!但据我所知,char * x相当于char x [],而且我在指针和指向值上强制执行’const-ness’这一事实应该没有区别……或者是它? 我对Windows平台上的C开发有点新,所以任何帮助都将不胜感激! 解决方法
你错了是你没有将常量声明为常量.在C语法(以及C语言)中,为了声明一个常量指针,你必须这样做
const char* const CLASS_NAME = "WinMain"; 请注意,您的GAME_TITLE,GAME_WIDTH和GAME_HEIGHT已正确声明为常量,这就是为什么它们不会给您带来任何麻烦.只有CLASS_NAME声明不正确,即非常量. 默认情况下,C中的常量具有内部链接,这就是为什么您可以在头文件中定义它们而不违反一个定义规则. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |