尽管使用了包含,但使用未定义的类

The*_*tor 1 c++ class undefined


我想在另一个类中创建我的游戏类的实例,但我收到一个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
Run Code Online (Sandbox Code Playgroud)

我想在其中创建游戏对象的标题:

Move.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
Run Code Online (Sandbox Code Playgroud)

Visual Studios 抛出:

    move.h(40): error C2079: 'Move::m_game_' uses undefined class 'Game'
Run Code Online (Sandbox Code Playgroud)

如果我使用它可以工作,Game* game;但这不是我需要/想要的。

为什么编译器给我一个未定义类的错误?
非常感谢任何帮助。

tre*_*oon 7

Game.h 不需要包含 Move.h,因为它没有被使用,正如评论中提到的,如果它在 cpp 中使用,它应该包含在那里。

问题可能与来自其他地方的包含头文件的顺序有关,比如 main。考虑这个结构:

(为了方便看,我删了一部分)

main.cpp 文件

#include "Game.h"
#include "Move.h"
Run Code Online (Sandbox Code Playgroud)

游戏.h文件

#ifndef GAME_H
#define GAME_H

#include "Move.h"

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

};
#endif // _GAME_H
Run Code Online (Sandbox Code Playgroud)

现在让我们看看在 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
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,当它最终宣布 Game m_game_; 它实际上还没有声明这个类。要么从包含它们的位置切换包含顺序,要么简单地从 Game.h 中删除 #include "Move.h",因为它没有在那里使用。