加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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中的常量具有内部链接,这就是为什么您可以在头文件中定义它们而不违反一个定义规则.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读