前向宣告和命名空間的關係

2021-09-24 11:48:40 字數 647 閱讀 7061

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是乙個型別,但不知道包含哪些成員。不完全型別只能以有限方式使用,不能定義該型別的物件,不完...