classb;
namespace test;}
//end test
#include
"a.hh"
#include
"b.hh"
namespace test
}// end test
namespace test;}
//end test
報錯原因是cannot initialize a member subobject type b * with an lvalue of type test::b *
原因在於前向宣告沒有放到namespace test中去。
我們會預設為存在倆個類,乙個是::b
乙個是test::b
我們手動加上命名空間實際上是
#include
"a.hh"
#include
"b.hh"
namespace test
}// end test
就是在a.hh中,將前向宣告b放到namespace test中去。 類的前向宣告
在我們看一些c 標頭檔案的時候,經常可以看到某些類的宣告但卻找不到定義。如 class abc 僅僅宣告,沒有定義 通常後面還會有定義指向這個型別的指標或引用,如 abc pointer abc pointer 這種形式稱之為類的前向宣告 引用。在宣告之後,定義之前,類abc是乙個不完全型別 inc...
類的前向宣告
class person void show1 person k cout上述 在友元函式的類外實現中使用了該類,則需在之前宣告,上述 已做宣告。但是上述 依然會報錯,因為類的提前宣告,編譯器只是知道了person這是乙個類,該類的具體細節 例如成員變數 編譯器並不知道,所以此時person又叫做不...
c 中的前向宣告
前向宣告 可以宣告乙個類而不定義它。這個宣告,有時候被稱為前向宣告 forward declaration 在宣告之後,定義之前,類screen是乙個不完全型別 incompete type 即已知screen是乙個型別,但不知道包含哪些成員。不完全型別只能以有限方式使用,不能定義該型別的物件,不完...