簡體   English   中英

結構的前向聲明

[英]Forward declaration of struct

我有一個頭文件啊,里面我已經聲明了一個結構。 該結構的名稱是file 內部file我有3個成員:a,b,c。 在a.cpp中,我實現了該結構並為該結構變量分配了一些值。

現在我有另一個文件bh里面我有一個結構file的前向聲明。 在此之前,如果我編譯它沒有顯示錯誤但是當我要通過該b.cpp類訪問該結構中存在的變量時,它將給出類似“undefined struct”的錯誤。

我究竟做錯了什么?

錯誤的根本原因是什么?

當您轉發聲明類型時,編譯器會將其視為不完整類型

前向聲明告訴編譯器存在所述類型,並且不再存在關於特定類型的內容。因此,您無法對該類型執行任何需要編譯器知道其內存布局的操作( 如創建對象或解除引用該類型的指針 )。

解:

如果需要遵循結構成員,則無法轉發聲明。您需要在源文件中包含頭文件。這將確保編譯器知道該類型的內存布局。 您必須相應地設計您的項目。

要訪問成員,需要完整的定義。 你需要在b.cpp includeb.cpp ,而不僅僅是向前聲明struct (它產生一個不完整的類型)。

編輯:

前瞻聲明足以滿足:

class B;
class C
{
    B& b;
    B* b;
    B foo();
    foo(B b);
};

但不是

class B;
class C
{
    B b;   //ERROR
    B foo()
    {
        B x; //error
        x.whatever(); //error
        return B(); //error
    }
};

您需要包含使用成員的結構定義,或者編譯器不知道它們是什么。

所以,如果你有b.cpp,這個

   func(mystruct &s)
   {
        s.a = 1;
   }

編譯器很好,直到它進入賦值。 此時,它試圖在'mystruct'中找到'a'的定義,但找不到它。

你應該在b.cpp中#include "ah" ,或者可能,根據其他內容啊,你可能需要一個單獨的結構頭,並包含它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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