我有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函数的行^

最佳答案

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

error C2065: 'currentGS' : undeclared identifier


要么

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


这意味着这些变量或类型(identifier)目前尚不知道-常见的原因是您不包括声明标识符的头文件。确保实际上包含了用于声明变量和类型的头文件。

09-27 06:58