其他分享
首页 > 其他分享> > C类前瞻性声明

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任何帮助.

编辑:

我决定将所有返回的类型更改为指针以避免内存泄漏,但现在我得到了:

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"

它只在基类中,其他一切都没问题… tile类中返回* tile的每个函数都有这个错误…

一些代码:

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() {};
};

解决方法:

为了编译新的T,T必须是完整的类型.在你的情况下,当你在tile_tree :: tick的定义中说新的tile_tree_apple时,tile_tree_apple是不完整的(它已被前向声明,但它的定义稍后在你的文件中).尝试将函数的内联定义移动到单独的源文件中,或者至少在类定义之后移动它们.

就像是:

class A
{
    void f1();
    void f2();
};
class B
{
   void f3();
   void f4();
};

inline void A::f1() {...}
inline void A::f2() {...}
inline void B::f3() {...}
inline void B::f4() {...}

当您以这种方式编写代码时,这些方法中对A和B的所有引用都保证引用完整类型,因为没有更多的前向引用!

标签:c,class,forward-declaration
来源: https://codeday.me/bug/20190926/1821880.html