Указатель на другой класс как свойство - PullRequest
0 голосов
/ 26 ноября 2011

Почему я получаю сообщение об ошибке при попытке создать свойство для другого класса с помощью такого указателя:

#ifndef SQUARE_H
#define SQUARE_H

#include <string>
//using namespace std;

    #include "Player.h"

class Square

{
public:

    Square(int); 
    void process();

protected:

    int ID;
    Player* PlayerOn;          <---

};



    #endif

и класс игрока:

    #ifndef PLAYER_H
    #define PLAYER_H

    #include <string>
//using namespace std;

    #include "Square.h"

class Player
{
public:

    Player(int,int);
//  ~Player(void);
    int playDice();


private:

        int ID;
        int money;


};
#endif

Я получаю:

syntax error missing ; before * (on the declaration of  Player* PlayerOn;)

и отсутствующий спецификатор типа (в той же строке ...)

Ответы [ 2 ]

3 голосов
/ 26 ноября 2011

Похоже, проблема рекурсивных включений. Вы должны использовать предварительную декларацию в своем квадратном классе.

#ifndef SQUARE_H
#define SQUARE_H

#include <string>
//using namespace std;

class Player; //You will have to use the #include "player.h" in your .cpp

class Square

{
public:

    Square(int); 
    void process();

protected:

    int ID;
    Player* PlayerOn;          <---

};
2 голосов
/ 26 ноября 2011

Проблема в том, что вы включаете Square.h в Player.h, и поэтому, когда вы получаете Player* PlayerOn; Игрок не определен

Либо у вас нет #include "Square.h" в вашем Player.h, который будетработать с этим кодом.Если фактический код более сложный, замените #include "Square.h" предварительным объявлением квадрата class Square;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...