1

コードが機能しない理由がわかりません.C++とすべての名前空間/ヘッダーファイルなどの学習を始めたばかりです..

私は主な機能を持っています:

#include "stdafx.h"
#include "Game.h"

int _tmain(int argc, _TCHAR* argv[])
{
    Game::Start();
    return 0;
}

ゲーム内で静的関数を呼び出して開始します。

#include "stdafx.h"
#include "Game.h"
void Game::Start(void)
{
    _gameState = ShowingMenu;

    while(IsExiting())
    {
        switch(_gameState)
        {
            case ShowingMenu:
                ShowMenu();
                break;

        }
    }
}

これで、enum GameState を使用する場所はどこでも (ヘッダーからわかるように)、次のようになります。

Unresolved external symbol private static enum Game::GameState Game::GameState

これが Game.h です

#pragma once

class Game {
public:
    static void Start();
private:
    static void GameLoop();
    static bool IsExiting();
    static void ShowMenu();
    enum GameState { Uninitialized, ShowingMenu, Dealing, DealerTurn, PlayerTurn, Betting, Exiting };
    static GameState _gameState;
};

これが機能しない理由がわからない場合、唯一の解決策は、列挙型全体を取り出すことでした。

4

1 に答える 1

1

_gameState必ず単一の翻訳単位で定義してください(おそらく内でGame.cpp):

Game::GameState Game::_gameState;

クラス定義のstatic GameState _gameState;は宣言にすぎないため、メンバーも定義する必要があります。詳細については、 C++FAQを参照してください。

于 2013-02-25T19:36:38.577 に答える