我在使用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";
错误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开发有点新,所以任何帮助都将不胜感激!