2014-09-20 44 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