在类中拒绝包含用户指定的类型

时间:2013-07-06 12:16:01

标签: c++ sfml datamember usertype

我有 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 包含在游戏类中(游戏类是 Monostate ):

Game.hpp

class Game
{
public:
    Game() {};

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

这是init函数的实现(仅在Game类中实现了函数):

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

}

我收到了这些错误:

Game.hpp

(两次)错误C2146 :语法错误:缺少';'在标识符'currentGS'之前 - 第15行

(两次)错误C4430 :缺少类型说明符 - 假设为int。注意:C ++不支持default-int - 第15行

第15行static GameSettings currentGS;

Game.cpp

错误C2065 :'currentGS':未声明的标识符 - 第7,8,9行

错误C2228 :'。loadSettings'左边必须有class / struct / union - 第7,8,9行

这些只是init函数的行^

2 个答案:

答案 0 :(得分:1)

您将const放在错误的地方

更新

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

为:

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

答案 1 :(得分:1)

您的代码示例不完整。您是否包含要使用的类的标题?当您看到如下错误时:

error C2065: 'currentGS' : undeclared identifier

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

这意味着此时不知道那些变量或类型(identifier) - 并且通常的原因是您没有包含声明标识符的头文件。确保您实际包含了声明变量和类型的头文件。