[英]C++ Class Prototyping
我在這里想念什么嗎?
class Foo;
class Bar {
public:
Foo foo;
};
class Foo { };
錯誤:
錯誤C2079:“ Bar :: foo”使用未定義的類“ Foo”
當您向前聲明一個類時,可以創建它的指針和引用,但是不能使該類成為該成員的成員:需要Foo
的完整定義來確定外部類的布局(即Bar
) ,否則編譯器無法決定Bar
的大小和結構。
不過,這是允許的:
class Foo;
class Bar {
public:
Foo* fooPtr;
Foo& fooRef;
};
允許使用指向前向聲明的類的指針和引用的原因是,指針和引用的大小不取決於它們所指向(或所引用)的類的結構。
是的,您缺少重要的事情:一個問題。
我假設您想知道代碼中有什么問題,以及為什么編譯器會發出錯誤。
編譯器必須知道Foo的大小才能計算Bar類的布局。 Foo對象的大小由其布局確定,要知道該布局,編譯器必須知道類定義。 在聲明成員變量foo時,它僅知道Foo存在,但不知道它的大小,因為您之前僅給它提供了一個聲明,而不是定義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.