2016-04-22 1 views
-3


Я хочу создать экземпляр класса моей игры в другом классе, но я получаю ошибку uses undefined class, хотя я включаю game.h.использует undefined класс, несмотря на использование include

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 

Визуальный Studios бросает:

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

Он работает, если я использую Game* game; но это не то, что мне нужно/нужно.

Почему компилятор дает мне ошибку неопределенного класса?
Большое спасибо за помощь.

+4

Почему 'game.h' включает' move.h'? – NathanOliver

+1

Вам не хватает ';' после вашего 'class {}'. – Holt

+0

@NathanOliver Поскольку мне нужно создать объект Move в моей Game.cpp 'm_command_map_ [MOVE] = новый Move (MOVE);' – TheDoctor

ответ

2

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 

Как вы можете видеть, когда он наконец-то объявит Game m_game_; он еще не объявил класс еще. Либо включите порядок включения, из которого они включены, либо просто удалите #include «Move.h» из Game.h, так как он там не используется.

+0

Спасибо за полное объяснение. это было из-за включений, и теперь это работает наконец :) – TheDoctor