[英]Forward declaration of struct
我有一個頭文件啊,里面我已經聲明了一個結構。 該結構的名稱是file
。 內部file
我有3個成員:a,b,c。 在a.cpp中,我實現了該結構並為該結構變量分配了一些值。
現在我有另一個文件bh里面我有一個結構file
的前向聲明。 在此之前,如果我編譯它沒有顯示錯誤但是當我要通過該b.cpp類訪問該結構中存在的變量時,它將給出類似“undefined struct”的錯誤。
我究竟做錯了什么?
錯誤的根本原因是什么?
當您轉發聲明類型時,編譯器會將其視為不完整類型 。
前向聲明告訴編譯器存在所述類型,並且不再存在關於特定類型的內容。因此,您無法對該類型執行任何需要編譯器知道其內存布局的操作( 如創建對象或解除引用該類型的指針 )。
解:
如果需要遵循結構成員,則無法轉發聲明。您需要在源文件中包含頭文件。這將確保編譯器知道該類型的內存布局。 您必須相應地設計您的項目。
要訪問成員,需要完整的定義。 你需要在b.cpp
include
頭b.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.