尽管使用了包含

时间:2016-04-22 13:34:29

标签: c++ class undefined


我想在另一个类中创建我的游戏类实例,但我收到uses undefined class错误,但我包含game.h

Game.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

我想要创建游戏对象的标题:

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

Visual Studios投掷:

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

如果我使用Game* game;,那就有效,但这不是我需要/想要的。

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

1 个答案:

答案 0 :(得分:4)

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

问题可能与其他地方的include头文件的命令有关,比如main。考虑这个结构:

(我删除了一部分以便于查看)

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

正如你所看到的,当它最终宣告游戏m_game_时;它还没有真正宣布这个课程。从包含它们的位置切换包含顺序,或者只需删除#include" Move.h"来自Game.h,因为它没有在那里使用。