class OutClass;
class Test
{
public:
Test f(Test t); //ok?
Test *fp(Test *p);//ok?
Test * tp;//ok?
Test t; //ok?
OutClass *po; //ok?
OutClass mo; //ok?
OutClass fo(OutClass);//ok?
inline OutClass* ifop(OutClass* ){};//ok?
inline OutClass* ifo(OutClass ){};//ok?
inline OutClass ifo(OutClass* ){};//ok?
inline OutClass ifo(OutClass ){};//ok?
};
uj5u.com熱心網友回復:
class OutClass;
class Test
{
public:
Test f(Test t); //ok?
Test *fp(Test *p);//ok?
Test * tp;//ok?
Test *t; //ok?
OutClass *po; //ok?
OutClass *mo; //ok?
OutClass fo(OutClass);//ok?
inline OutClass* ifop(OutClass* ){};//ok?
inline OutClass* ifo(OutClass* ){};//ok?
};
有些是要帶指標的,這樣可以過去了,不知道符合你的要求不
uj5u.com熱心網友回復:
對于類的前向宣告,因為沒有類的定義,也就無法知道具體記憶體而已與使用方式,只要不使用到類的定義,就不出錯。
class OutClass;
class Test
{
public:
Test f(Test t); //ok?
Test *fp(Test *p);//ok?
Test * tp;//ok?
Test t; //ok? 錯誤:類不能包含自身。這會導致無法構造。
OutClass *po; //ok?
OutClass mo; //ok?錯:這里需要先知道outclass的定義。
OutClass fo(OutClass);//ok? 函式引數或 回傳值中用到類,這里只是函式宣告,可以不知道具體定義,前向宣告則可。
inline OutClass* ifop(OutClass* ){};//ok?
inline OutClass* ifo(OutClass ){};//ok? -----函式同名同引數,只有回傳值不一樣,不適合多載規定。
inline OutClass ifo(OutClass* ){};//ok?
inline OutClass ifo(OutClass ){};//ok? 同名函式,只有回傳值不一樣,是不行的。多載規則是引數必須不一樣,才能多載
};
幾個inline函式,無論是回傳值,或者是回傳指標,在宣告時,均不會錯誤,如果是回傳值,則回傳值那條陳述句錯。
可是現在是個空函式,則回傳任意的東西,此時編譯器會有警告:函式應該回傳一個值。
注意:函式的宣告不需要知道類的具體定義,前向宣告即可。那幾個空的inline函式是無意義的。
inline OutClass ifo(OutClass a ){ return fo(a) ; }; //這樣也是可以的,無須知道類的定義。
uj5u.com熱心網友回復:
注意,在類中,定義一個函式,也只是定義類中有一個函式,而函式的實作卻不在那里。那只是相當于函式的宣告,而宣告是不需要用到類的定義的,有前向宣告即可。uj5u.com熱心網友回復:
用編譯器一編譯,不是就會提示你了嗎?轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/118580.html
標籤:基礎類
上一篇:列印機驅動安裝INF檔案
