簡體   English   中英

C ++類原型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM