我一直在閱讀一些關於遠期聲明,包括在這個論壇。他們都說,這讓我們可以包含頭文件,但下面的代碼生成錯誤:正向聲明產生不兼容的類型錯誤
#ifndef CLASSA_H_
#define CLASSA_H_
class B;
class A {
public:
A();
~A();
int getCount();
private:
static int _count;
int _num;
B _b1; //ERROR
};
編譯器說: A.h:23: error: field ‘_b1’ has incomplete type
我注意到,如果我做B*
類型的_b1
問題解決了。
那麼前向聲明只適用於指針類型嗎?
如果我想A
持有B
對象我必須#inlcude "B.h"
?
謝謝!
有點自我推銷:這是一個答案,解釋[你可以做什麼,不能用不完整的類型](http://stackoverflow.com/questions/553682/when-to- use-forward-declaration/553869#553869)(ie已聲明但尚未定義的類型)。 – 2010-09-29 17:02:02