1. ホーム
  2. c++

[解決済み] include を使用しているにもかかわらず、未定義のクラスを使用している

2022-02-08 17:27:02

質問


ゲーム・クラスのインスタンスを別のクラスで作成したいのですが、次のようなエラーが発生します。 uses undefined class を含むにもかかわらず、エラーが発生します。 game.h .

ゲーム.h

#ifndef GAME_H
#define GAME_H

#include "Move.h"

class Game
{
  private:

    //--------------------------------------------------------------------------
    // Private copy constructor
    //
    Game(const Game& original);

 public:
    //--------------------------------------------------------------------------
    // Public assignment operator
    //
    Game& operator=(const Game& original);

    //Constructors
    Game ();

    //Destructor
    ~Game ();
};
#endif // _GAME_H

Game Objectを作成するHeader。
移動.h

#ifndef MOVE_H
#define MOVE_H

#include "Game.h"

class Move : public Command
{
  private:
    Move (const Move& original);
    Move& operator=(const Move& original);

    Game m_game_;  //Error
 };
  #endif // _MOVE_H

ビジュアルスタジオが投げています。

    move.h(40): error C2079: 'Move::m_game_' uses undefined class 'Game'

を使用すると動作します。 Game* game; しかし、それは私が必要とする/望んでいるものではありません。

なぜコンパイラは未定義のクラスというエラーを出すのですか?
よろしくお願いします。

解決方法は?

Game.hはMove.hを使用していないのでインクルードする必要はありません。コメントにあるように、もしcppで使用されているならば、そこにインクルードすべきです。

問題はおそらく、他の場所、例えばmainからのincludeヘッダーファイルの順序に関係します。この構造を考えてみましょう。

(見やすくするために一部を削除しました)

main.cppファイル

#include "Game.h"
#include "Move.h"

Game.hファイル

#ifndef GAME_H
#define GAME_H

#include "Move.h"

class Game
{
public:
    Game() {}
private:

};
#endif // _GAME_H

さて、Move.h を Game.h に追加した後、どのように見えるか見てみましょう。

    #ifndef GAME_H
    #define GAME_H

//added
    #ifndef MOVE_H
    #define MOVE_H

    #include "Game.h"

    class Move
    {
    public:
        Move() {}
    private:


        Game m_game_;
    };
    #endif // _MOVE_H

//to here

    class Game
    {
    public:
        Game() {}
    private:

    };
    #endif // _GAME_H

見ての通り、最終的に Game m_game_; を宣言するところでは、まだ実際にクラスを宣言していません。インクルードする順番を変えるか、Game.hから#include "Move.h"を削除して、そこで使用されていないことを確認してください。