【发布时间】:2012-12-07 22:44:13
【问题描述】:
我在使用 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[],而且我在指针和指向的值上都强制执行“const-ness”这一事实应该没有区别......或者是这样吗?
我对 Windows 平台上的 C++ 开发有点陌生,因此非常感谢任何帮助!
【问题讨论】:
-
SAFE_RELEASE 宏和它的朋友根本不安全。使用智能指针,不要自己
delete或Release()。 -
@DeadMG 感谢您的建议! :)
标签: c++ visual-studio-2010 visual-c++