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;
但这不是我需要/想要的。
为什么编译器给我一个未定义类的错误?
非常感谢任何帮助。
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",因为它没有在那里使用。