我在使用 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 个错误:
error LNK1169: one or more multiply defined symbols found
, 和
error LNK2005: "char const * const CLASS_NAME" (?CLASS_NAME@@3PBDB) already defined in graphics.obj
现在很奇怪,因为运行了“在文件中查找”,我绝对不会在其他地方声明它,即没有重复声明。
我应该将其更改为:
const char* const CLASS_NAME = "WinMain";
或者
const char CLASS_NAME[] = "WinMain";
它编译得很好!但据我所知char* x
,它等同于char x[]
,并且我在指针和指向的值上都强制执行“常量”这一事实应该没有什么区别......或者是吗?
我对 Windows 平台上的 C++ 开发有点陌生,因此将不胜感激任何帮助!