pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

C++ 類前向聲明

C++ class forward declaration(C++ 類前向聲明)
本文介紹了C++ 類前向聲明的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

當我嘗試編譯這段代碼時,我得到:

When I try to compile this code, I get:

52 C:Dev-CppProjektyyystrategyTiles.h invalid use of undefined type `struct tile_tree_apple' 
46 C:Dev-CppProjektyyystrategyTiles.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;};       
};

我真的不知道該怎么辦,我搜索了解決方案,但找不到任何與我的問題類似的東西...實際上,我有更多與父級tile"相關的課程.之前還可以...

I dont really know what to do, I searched for the solution but I couldn't find anything simmilar to my problem... Actually, I have more classes with parent "tile" and It was ok before...

我決定將所有返回的類型更改為指針以避免內存泄漏,但現在我得到了:

I decided to change all returned types to pointers to avoid memory leaks, but now I got:

27 C:Dev-CppProjektyyystrategyTiles.h ISO C++ forbids declaration of `tile' with no type 
27 C:Dev-CppProjektyyystrategyTiles.h expected `;' before "tick"

僅在基類中,其他一切正常... tile 類中返回 *tile 的每個函數都有此錯誤...

Its only in base class, everything else is ok... Every function in tile class which return *tile has this error...

一些代碼:

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

推薦答案

new T 要編譯,T 必須是完整類型.在您的情況下,當您在 tile_tree::tick 的定義中說 new tile_tree_apple 時,tile_tree_apple 是不完整的(它已被前向聲明,但是它的定義稍后在您的文件中).嘗試將函數的內聯定義移動到單獨的源文件中,或者至少將它們移動到類定義之后.

In order for new T to compile, T must be a complete type. In your case, when you say new tile_tree_apple inside the definition of tile_tree::tick, tile_tree_apple is incomplete (it has been forward declared, but its definition is later in your file). Try moving the inline definitions of your functions to a separate source file, or at least move them after the class definitions.

類似于:

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 的所有引用都保證引用完整類型,因為不再有前向引用!

When you write your code this way, all references to A and B in these methods are guaranteed to refer to complete types, since there are no more forward references!

這篇關于C++ 類前向聲明的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

How can I read and manipulate CSV file data in C++?(如何在 C++ 中讀取和操作 CSV 文件數據?)
In C++ why can#39;t I write a for() loop like this: for( int i = 1, double i2 = 0; (在 C++ 中,為什么我不能像這樣編寫 for() 循環: for( int i = 1, double i2 = 0;)
How does OpenMP handle nested loops?(OpenMP 如何處理嵌套循環?)
Reusing thread in loop c++(在循環 C++ 中重用線程)
Precise thread sleep needed. Max 1ms error(需要精確的線程睡眠.最大 1ms 誤差)
Is there ever a need for a quot;do {...} while ( )quot; loop?(是否需要“do {...} while ()?環形?)
主站蜘蛛池模板: 齿轮减速机电机一体机_齿轮减速箱加电机一体化-德国BOSERL蜗轮蜗杆减速机电机生产厂家 | 铝合金脚手架厂家-专注高空作业平台-深圳腾达安全科技 | 厂房出租-厂房规划-食品技术-厂房设计-厂房装修-建筑施工-设备供应-设备求购-龙爪豆食品行业平台 | 密集架|电动密集架|移动密集架|黑龙江档案密集架-大量现货厂家销售 | 紧急泄压人孔_防爆阻火器_阻火呼吸阀[河北宏泽石化] | 重庆小面培训_重庆小面技术培训学习班哪家好【终身免费复学】 | 蜂窝块状沸石分子筛-吸附脱硫分子筛-萍乡市捷龙环保科技有限公司 | 鹤壁创新仪器公司-全自动量热仪,定硫仪,煤炭测硫仪,灰熔点测定仪,快速自动测氢仪,工业分析仪,煤质化验仪器 | 垃圾处理设备_餐厨垃圾处理设备_厨余垃圾处理设备_果蔬垃圾处理设备-深圳市三盛环保科技有限公司 | 楼承板-开闭口楼承板-无锡海逵楼承板 | 臭氧老化试验箱,高低温试验箱,恒温恒湿试验箱,防水试验设备-苏州亚诺天下仪器有限公司 | 溶氧传感器-pH传感器|哈美顿(hamilton) | 篷房[仓储-婚庆-展览-活动]生产厂家-江苏正德装配式帐篷有限公司 | 运动木地板厂家_体育木地板安装_篮球木地板选购_实木运动地板价格 | 一体化污水处理设备-一体化净水设备-「山东梦之洁水处理」 | 济南网站建设_济南网站制作_济南网站设计_济南网站建设公司_富库网络旗下模易宝_模板建站 | 合肥白癜风医院_合肥治疗白癜风医院_合肥看白癜风医院哪家好_合肥华研白癜风医院 | 防水套管厂家-柔性防水套管-不锈钢|刚性防水套管-天翔管道 | KBX-220倾斜开关|KBW-220P/L跑偏开关|拉绳开关|DHJY-I隔爆打滑开关|溜槽堵塞开关|欠速开关|声光报警器-山东卓信有限公司 | 广州冷却塔维修厂家_冷却塔修理_凉水塔风机电机填料抢修-广东康明节能空调有限公司 | 江苏皓越真空设备有限公司| 砂石生产线_石料生产线设备_制砂生产线设备价格_生产厂家-河南中誉鼎力智能装备有限公司 | 石家庄律师_石家庄刑事辩护律师_石家庄取保候审-河北万垚律师事务所 | 门禁卡_智能IC卡_滴胶卡制作_硅胶腕带-卡立方rfid定制厂家 | 锌合金压铸-铝合金压铸厂-压铸模具-冷挤压-誉格精密压铸 | 臭氧发生器_臭氧消毒机 - 【同林品牌 实力厂家】 | 土壤墒情监测站_土壤墒情监测仪_土壤墒情监测系统_管式土壤墒情站-山东风途物联网 | 橡胶膜片,夹布膜片,橡胶隔膜密封,泵阀设备密封膜片-衡水汉丰橡塑科技公司网站 | 深圳工程师职称评定条件及流程_深圳职称评审_职称评审-职称网 | 深圳昂为官网-气体分析仪,沼气分析仪,动态配气仪,气体传感器厂家 | 洁净棚-洁净工作棚-无菌室-净化工程公司_北京卫护科技有限公司 | 分光色差仪,测色仪,反透射灯箱,爱色丽分光光度仪,美能达色差仪维修_苏州欣美和仪器有限公司 | 同学聚会纪念册制作_毕业相册制作-成都顺时针宣传画册设计公司 | 软瓷_柔性面砖_软瓷砖_柔性石材_MCM软瓷厂家_湖北博悦佳软瓷 | 活性氧化铝球|氧化铝干燥剂|分子筛干燥剂|氢氧化铝粉-淄博同心材料有限公司 | 筒瓦厂家-仿古瓦-寺庙-古建琉璃瓦-宜兴市古典园林建筑陶瓷厂有限公司 | 卡诺亚轻高定官网_卧室系统_整家定制_定制家居_高端定制_全屋定制加盟_定制家具加盟_定制衣柜加盟 | 北京模型公司-工业模型-地产模型-施工模型-北京渝峰时代沙盘模型制作公司 | 龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司_龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司 | 登车桥动力单元-非标液压泵站-非标液压系统-深圳市三好科技有限公司 | 广东青藤环境科技有限公司-水质检测 |