簡體   English   中英

取消引用指向不完整類型的指針

[英]Dereferencing a pointer to incomplete type

假設我們在一個源文件中有兩個結構:

struct B {
    int x;
};

struct A {
    beta y;
}; 

在等效的頭文件中,我們有這些:

typedef B* beta;
typedef A* alpha;

此外,這些函數原型在頭文件中定義:

printAplha(alpha);
compare(const beta, const beta);

在主文件中,我包含了特定的頭文件,代碼如下所示:

alpha one, two;
printAlpha(one);
printAlpha(two);
//everything works fine up to here
compare(one->y, two->y);

在我得到的代碼的最后一行

main.c:37:20: 錯誤:取消引用指向不完整類型的指針
main.c:37:33: 錯誤:取消引用指向不完整類型的指針

我知道我可以使用包裝函數進行compare ,其參數將是alpha類型(因為 compare 函數的參數不能更改 - 這是一個遞歸的),但我想看看是否有任何其他解決方案,以及為什么會發生這種情況。

注意:結構定義已寫入源文件以創建不透明數據類型。

您正在做的事情當然沒有“加密”,但是這使您的示例代碼無法看到這些結構的實現。 如果要訪問結構中的字段,則需要使完整的結構定義對該翻譯單元可見。 否則,它是一個不完整的類型,就像錯誤消息所說的那樣。

您正在嘗試使用 typedef 為struct Astruct B聲明一個不透明的數據類型,但同時您正在嘗試使用這種不透明類型訪問字段。

您只能執行上述其中一項操作,而不能同時執行兩項操作。

解決方案是公開完整的結構定義或提供幫助方法來幫助訪問特定字段。 輔助方法的實現將再次需要訪問完整的結構定義。

暫無
暫無

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

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