Когда я пытаюсь скомпилировать этот код я получаю:C++ опережающее объявление
52 C:\Dev-Cpp\Projektyyy\strategy\Tiles.h invalid use of undefined type `struct tile_tree_apple'
46 C:\Dev-Cpp\Projektyyy\strategy\Tiles.h forward declaration of `struct tile_tree_apple'
какая-то часть моего кода:
class tile_tree_apple;
class tile_tree : public tile
{
public:
tile onDestroy() {return *new tile_grass;};
tile tick() {if (rand()%20==0) return *new tile_tree_apple;};
void onCreate() {health=rand()%5+4; type=TILET_TREE;};
};
class tile_tree_apple : public tile
{
public:
tile onDestroy() {return *new tile_grass;};
tile tick() {if (rand()%20==0) return *new tile_tree;};
void onCreate() {health=rand()%5+4; type=TILET_TREE_APPLE;};
tile onUse() {return *new tile_tree;};
};
Я действительно не знаю, что делать, я искал решение но я не мог найти ничего похожего на мою проблему ... На самом деле, у меня больше классов с родительской «плиткой», и это было нормально ... Thanx для любой помощи.
EDIT:
я решил изменить все возвращаемые типы, указатели, чтобы избежать утечек памяти, но теперь я получил:
27 C:\Dev-Cpp\Projektyyy\strategy\Tiles.h ISO C++ forbids declaration of `tile' with no type
27 C:\Dev-Cpp\Projektyyy\strategy\Tiles.h expected `;' before "tick"
Св только в базовом классе, все остальное нормально ... Каждый функция в классе плитки, которые возвращают * плитка имеет эту ошибку ...
Некоторый код:
class tile
{
public:
double health;
tile_type type;
*tile takeDamage(int ammount) {return this;};
*tile onDestroy() {return this;};
*tile onUse() {return this;};
*tile tick() {return this};
virtual void onCreate() {};
};
Не нужно ли 'inline' идти в определении класса? Я никогда не слишком уверен в этом ... –
@KerrekSB: AFAIR, он должен идти либо к объявлению, либо по определению, но не имеет значения, какой из них –
@KerrekSB: ему нужно только перейти к определению; включение его в декларацию не имеет никакого эффекта. – ildjarn