2014-09-20 109 views
0

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

我收到了所有变量的错误。我正在尝试使用标题和转发声明。这里是我的代码片段:

//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; 

所有变量的线条赋予了错误,“[这里变量名]以前这里声明”。我能做些什么来解决这个问题?

回答

3

的问题是,include guards只是防止多次包含同一translation unit(源文件)英寸

如果定义在头文件中的变量,并将其包括在一个以上的源文件,则变量将在两个源文件(翻译单元)来定义,而当你然后链接生成的目标文件一起链接器会注意到这个变量是在两个对象文件中定义的并且给你一个错误。

你应该做的是声明在头文件中的变量,最容易做到这一点是申报前添加extern关键字,像

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

关于你的编译器错误,你得到它,只是因为你在头文件在源文件中定义的变量。该解决方案,您的问题是一样的,在头文件中声明在源文件中定义

你应该阅读有关the One Definition Rule (a.k.a. ODR)

+0

谢谢你,完美的工作:) – 2014-09-20 15:30:18