c ++头文件重定义错误

时间:2014-09-20 14:39:52

标签: c++ eclipse sdl sdl-2

*注意:我是c ++的新手,很抱歉,如果我犯了一个明显的错误。

我的所有变量都出错了。我正在尝试使用标头和转发声明。以下是我的代码片段:

//BotRenderer.h
#ifndef BOTRENDERER_H_
#define BOTRENDERER_H_
#include <SDL2/SDL.h>
SDL_Texture *botTextures[217];
int currentBotFrame;

//BotRenderer.cpp
#include "BotRenderer.h"
SDL_Texture *botTextures[217];
int currentBotFrame = 0;

所有带变量的行都会给出错误,此处的变量名称此处已声明为&#39;。我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:3)

问题是include guards只能防止多个包含在同一个translation unit(源文件)中。

如果在头文件中定义变量并将其包含在多个源文件中,则该变量将在两个源文件(翻译单元)中定义,然后当您链接生成的时对象文件一起链接器将注意到变量在两个目标文件中定义并给出错误。

你应该做的是声明头文件中的变量,最简单的方法是在声明之前添加extern关键字,比如

extern SDL_Texture *botTextures[217];
extern int currentBotFrame;

关于编译器错误,只需要在中定义中的变量源文件中的头文件即可。你问题的解决方案是相同的,在头文件中声明并在源文件中 define

您应该阅读the One Definition Rule (a.k.a. ODR)