首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个定义(LNK2005)错误

多个定义(LNK2005)错误
EN

Stack Overflow用户
提问于 2011-12-29 23:42:16
回答 3查看 658关注 0票数 0

我最近尝试创建一个全局头文件,它将包含错误代码的所有定义(即NO_ERROR、SDL_SCREEN_FLIP_ERROR等)。这些只是我在这里定义的整数。

我在我的两个.cpp文件中都包含了这些,但是我得到了一个错误,声明我定义了两次then。

globals.h:

代码语言:javascript
复制
#pragma once

// error related globals
int SCREEN_LOAD_ERROR = 1;
int NO_ERROR = 0;

main.cpp:

代码语言:javascript
复制
#include "globals.h"
#include "cTile.h"
/* rest of the code */

cTile.h:

代码语言:javascript
复制
#pragma once
#include "globals.h"

class cTile {
};

有人抱怨SCREEN_LOAD_ERROR和NO_ERROR被定义了两次,但据我所知,#NO_ERROR一次应该会阻止这种情况(我也尝试了#ifndef,但这也不起作用)。

编译器输出:

1>main.obj :错误LNK2005:"int SCREEN_LOAD_ERROR“(?SCREEN_LOAD_ERROR@@3HA)已在cTile.obj 1>main.obj中定义: error LNK2005:"int NO_ERROR”(?NO_ERROR@@3HA)已在cTile.obj中定义

我是不是遗漏了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-29 23:46:06

不要在头文件中声明变量。

在头文件中声明变量时,将在包含头文件的每个转换单元中创建该变量的副本。

的解决方案是:

在其中一个头文件中声明它们为extern,并在其中一个cpp文件中定义它们。

globals.h:

代码语言:javascript
复制
extern int SCREEN_LOAD_ERROR;
extern int NO_ERROR;

globals.cpp:

代码语言:javascript
复制
#include "globals.h"
int SCREEN_LOAD_ERROR = 0;
int NO_ERROR = 0;

main.cpp:

代码语言:javascript
复制
#include "globals.h"

cTile.h.h:

代码语言:javascript
复制
#include "globals.h"
票数 5
EN

Stack Overflow用户

发布于 2011-12-29 23:46:47

您可以简单地使用枚举:

globals.h:

代码语言:javascript
复制
enum
{
    SCREEN_LOAD_ERROR = 1,
    NO_ERROR = 0,
    // ...
}
票数 3
EN

Stack Overflow用户

发布于 2011-12-30 00:00:56

使用#ifndef可以很好地工作(虽然它可以工作,但这不是最佳实践)。试着这样做:

globals.h

代码语言:javascript
复制
#ifndef GLOBALS
#define GLOBALS

int SCREEN_LOAD_ERROR = 1;
int NO_ERROR = 0;

#endif

cTile.h:

代码语言:javascript
复制
#include "globals.h"

class cTile {
};

main.cpp:

代码语言:javascript
复制
#include "globals.h"
#include "cTile.h"
/* rest of the code */
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8669899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档