2012-02-09 80 views
2

我已經在枚舉稱爲「sm.h」枚舉頭文件中

enum GameStates 
{ 
    STATE_NULL = 0, 
    STATE_INTRO, 
    STATE_TITLE, 
    STATE_MAIN, 
    STATE_EXIT 
}; 

它所做的一個頭文件中聲明是列表中的可能的遊戲狀態

然而在「基地下面一行。 cpp「:

stateID = STATE_INTRO; 

編譯器顯示」STATE_INTRO未在此範圍內聲明「。我不知道我做錯了什麼。我知道我已經包含了頭文件,我可以從.cpp文件中減速。那麼爲什麼我會得到這個錯誤。

bool baseFunctions::load_rc() 
{ 
stateID = STATE_INTRO; 

currentState = new Intro(); 

return true; 
} 

,其在頭文件中定義了一類函數:

stateID = STATE_INTRO; 

處於使用。

有沒有全球衝突,因爲它是整個程序的唯一枚舉

+0

他們在相同的命名空間嗎? – 2012-02-09 23:39:08

+0

我沒有使用名稱空間。我是否需要命名空間 – drCoding 2012-02-09 23:39:36

+0

我認爲您不需要命名空間限定 – drCoding 2012-02-09 23:41:41

回答

3

「sm.h」從你的鏈接到您的文件,你的兩個sm.hbase.h

#ifndef BASE_H_INCLUDED 
#define BASE_H_INCLUDED 

更改後的一個在sm.h喜歡的東西

#ifndef SM_H_INCLUDED 
#define SM_H_INCLUDED 

,我希望你會沒事的。

正因爲如此,base.cpp負載base.h,那麼當它到達sm.h #ifndef僞是假的,所以它在sm.h排除了一切。

+0

謝謝。男人代碼塊可以是一個真正的痛苦 – drCoding 2012-02-10 00:42:59

+0

沒有問題。如果你的編譯器支持'#pragma once',你可以用它來代替'#ifndef'。但是,代碼便攜性較差。 – 2012-02-10 00:49:52

1

最有可能的是,你不包括base.cpp

+0

sm.h包含在base.cpp和base.h中 – drCoding 2012-02-10 00:14:54