2013-03-22 89 views
-1

比方說,我們在源文件中的兩個結構:解引用指向不完全類型

struct B { 
    int x; 
}; 

struct A { 
    beta y; 
}; 

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

typedef B* beta; 
typedef A* alpha; 

而且,這些函數原型定義在頭文件中:

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

在主文件中,我已經包含了特定的頭文件和代碼看起來l IKE在此:

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

在代碼的最後一行我得到

main.c:37:20: error: dereferencing pointer to incomplete type
main.c:37:33: error: dereferencing pointer to incomplete type

我知道我可以使用的包裝功能compare,它的參數是alpha類型(如比較函數的參數不能改變 - 這是遞歸的),但我想看看是否有其他解決方案,爲什麼會發生這種情況。

注:結構定義已寫入源文件以加密其內部結構。

+0

爲什麼我的問題downvoted?有人可以提供一個理由,以便知道我做錯了什麼嗎? – Chris 2013-03-22 02:09:41

回答

1

您試圖使用typedefs聲明struct Astruct B的不透明數據類型,但同時您嘗試使用這種不透明類型訪問這些字段。

您只能執行上述操作之一,不能同時執行。

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

+0

謝謝Tuxdude,你有我想要做的!我將創建輔助方法。 – Chris 2013-03-22 02:06:15

1

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

相關問題