我有一個非常簡單的父子關係,其中OlderSon從父繼承和家長有一個指針指向他OlderSon,如:C++。孩子從父母繼承,幷包括父屬性
#ifndef PARENT_HXX
#define PARENT_HXX
#include <iostream>
#include <string>
//#include "OlderSon.hxx"
class OlderSon;
class Parent
{
private :
OlderSon* _os;
public :
int _age;
std::string _name;
Parent(){
_name="parent name";
_age=60;
//OlderSon* _os=new OlderSon();
}
};
#endif //PARENT_HXX
和兒子:
#ifndef OLDERSON_HXX
#define OLDERSON_HXX
#include <iostream>
#include <string>
#include "Parent.hxx"
class OlderSon: public Parent
{
public:
OlderSon(){
_age=25;
_name="Olderson name";
}
};
#endif //OLDERSON_HXX
但是每當我試圖以取消在指針被初始化OlderSon* _os=new OlderSon();
我得到一個錯誤信息行:
Parent.hxx: In constructor ‘Parent::Parent()’:
Parent.hxx:25:31: error: invalid use of incomplete type ‘struct OlderSon’
Parent.hxx:8:7: error: forward declaration of ‘struct OlderSon’
我嘗試了不同的方式,即包括.hxx或前向聲明,但似乎沒有任何幫助。我想這不是一個非常複雜的問題,但它開始令人沮喪。
任何想法?
在此先感謝!
你的兒子是父母嗎?我想也許你應該有一個Person類的基類,並且Person實例和其他的Person類實例組合起來形成族。 – Dennis 2012-04-17 10:48:16
嗨,現在你指出了兒子/父母的概念沒有多大意義。不過,我試圖將名稱更改爲「父/子」以更清楚地解釋它。實際上,這些類是Factory方法的一部分。我想在遊戲中創建新的CHARACTERS和新的ITEMS。我創建了一個'ObjectFactory'(作爲Parent),它將過濾一個ITEM或CHARACTER想要創建的對象。還有兩個子類'ItemFactory'和'CharacterFactory',它們將是'ObjectFactory'的屬性。然後根據情況使用'ItemFactory'或'CharacterFactory'的'.createObject(...)'。 – lllllll 2012-04-17 11:17:02
你不需要過濾任何東西。 ObjectFactory應該是抽象的,如果用戶想創建一個項目,他們應該只使用ItemFactory。 – Dennis 2012-04-19 09:09:47