我想在另一个类中创建我的游戏类实例,但我收到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;
,那就有效,但这不是我需要/想要的。
为什么编译器会给我一个未定义类的错误?
非常感谢任何帮助。
答案 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,因为它没有在那里使用。