Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Другие языки _ Преждевременное обявление

Автор: Игорь 31.07.2012 9:55

Такой файл компилируется с ошибками типа error: 'Player' does not name a type (понятно это ж пространсто имён). Проблема, похоже, в заголовочных файлах: они где то взаимоисключаются, поэтому я убрал includ'ы и добавил объявления классов, но ошибка не исчезла. Почему, ведь я использую только указатели и ссылки, а им должно хватать и обявления?


#ifndef _TABLE_HPP_
#define _TABLE_HPP_

class Ball::CBall;
class Player::CPlayer;

namespace Table {

class CTable {

public:

CTable (unsigned int Width, unsigned int Height);

inline unsigned int getWidth () const;
inline unsigned int getHeight () const;

inline Player::CPlayer & getLeftPlayer ();
inline Player::CPlayer & getRightPlayer ();

inline Ball::CBall & getBall ();

private:

unsigned int d_Width;
unsigned int d_Height;

Player::CPlayer * d_Left_Player;
Player::Cplayer * d_Right_Player;

Ball::CBall * d_Ball;

};

}

#endif


Автор: IUnknown 31.07.2012 11:25

Цитата
понятно это ж пространсто имён
Чего ж ты не пишешь этого, чтобы компилятору тоже было понятно?
#ifndef _TABLE_HPP_
#define _TABLE_HPP_

namespace Ball
{
class CBall;
}
namespace Player
{
class CPlayer;
}

namespace Table {
class CTable {
public:
CTable (unsigned int Width, unsigned int Height);
inline unsigned int getWidth () const;
inline unsigned int getHeight () const;
inline Player::CPlayer & getLeftPlayer ();
inline Player::CPlayer & getRightPlayer ();
inline Ball::CBall & getBall ();
private:
unsigned int d_Width;
unsigned int d_Height;
Player::CPlayer * d_Left_Player;
Player::CPlayer * d_Right_Player;
Ball::CBall * d_Ball;
};
}
#endif

Автор: Игорь 31.07.2012 17:01

Я то думал он сам догадается... Впрочем, хотя проблемы нет здесь она вылезла в другом месте, видимо, прдётся разгребать фарш из файлов. Тем не менее спасибо.