2013-07-06 27 views
0

我有GameSettings類。在類中被拒絕的用戶指定類型的遏制

GameSettings.hpp

class GameSettings 
{ 
public: 
    GameSettings(); 

    GameSettings loadSettings(); 
    void saveSettings(GameSettings const & GS); 

    sf::VideoMode getVideoMode() const {return VMode;} 
    bool isFullscreen() const {return fullscreen;} 

private: 
    sf::VideoMode VMode; 
    bool fullscreen; 

}; 

一個GameSettings包含在遊戲類(Game類是的Monostate):

Game.hpp

class Game 
{ 
public: 
    Game() {}; 

    static void init(); 
    static void run(); 
    static void clean(); 
private: 
    static sf::Window window; 
    static GameSettings currentGS; 
}; 

這裏是初始化函數的執行(只執行功能的遊戲類還):

Game.cpp

void Game::init() 
{ 
currentGS.loadSettings(); 
sf::Uint32 style = currentGS.isFullscreen() ? sf::Style::Fullscreen : sf::Style::None | sf::Style::Close; 
window.create(currentGS.getVideoMode(), "Name", style); 

} 

而且我得到這些錯誤:

遊戲.hpp

(兩次)錯誤C2146:語法e rror:失蹤';'識別符 'currentGS' 前 - 線15

(兩次)錯誤C4430:缺少類型說明 - 假定爲int。注意:C++不支持默認int - 線15

線15static GameSettings currentGS;

Game.cpp

錯誤C2065: 'currentGS':未聲明的標識符 - 第7,8,9行

錯誤C2228:左「.loadSettings'必須有類/結構/聯合 - 7號線,8,9

這些只是初始化函數的行^

+1

您的代碼示例不完整。你是否包含你想要使用的類的頭文件?如果你是,爲什麼你的代碼樣本不反映? –

+0

哦,是的,我沒有粘貼#include命令。最後我發現我忘了一個。非常感謝。把它寫成答案,我將其標記爲正確的答案。 – sjaustirni

+0

謝謝。我已經發表了我的評論作爲答案並擴展了一下。 –

回答

1

您的代碼示例不完整。你是否包含你想要使用的類的頭文件?當你看到這樣的錯誤:

error C2065: 'currentGS' : undeclared identifier 

error C2228: left of '.loadSettings' must have class/struct/union 

這意味着,這些變量或類型(的identifier)沒有在這個時間點知 - 對於一個常見的原因是你不包括標識符被聲明的頭文件。確保你實際上包含了你聲明你的變量和類型的頭文件。

1

你把const在錯誤的地方

更新:

void saveSettings(GameSettings & const GS); 
           ^^^^^ 

到:

void saveSettings(GameSettings const & GS); 
           ^^^^^     
相關問題