簡體   English   中英

函數中引用的未解析的外部符號

[英]Unresolved external symbol referenced in function

我意識到如果不為您提供大量代碼(我會盡力避免),這是一個很難回答的問題。

本質上我在 X 類中遇到了這個錯誤,它 #includes Y 類標頭。 Y 類標頭具有三種吸氣劑定義

// Getters
static ID3D10Device* PDevice();
static ID3D10Buffer* PBuffer();
static ID3D10Buffer* IBuffer();

我得到三個相同的錯誤,都發生在 X 類中。所以基本上錯誤是:

未解析的外部符號 ID3D10Device* PDevice() 在函數中引用(X 類的構造函數)

對不起,如果這有點含糊。 知道為什么會這樣嗎? 我用谷歌搜索了它,但我只能對這個錯誤是什么做出有根據的猜測。

首先,這是鏈接器錯誤。 此鏈接器錯誤意味着找不到損壞的名稱PDevice等。

你能確保你有一個與定義相匹配的函數的實現嗎? 此外,可能很明顯,但只是檢查你實際上有一個實現。 如果您的實現位於外部庫中,請確保已在鏈接器中包含其他庫。

希望有所幫助!

確保將包含類Y的定義和實現的文件添加到項目中,以便鏈接器在Yo文件中找到符號

確保正確設置依賴項(添加lib文件)。 在Visual Studio中,您可以通過“ 屬性” - >“鏈接器” - >“輸入” - >“其他依賴項”來執行此操作 在文本框中,您現在可以輸入.lib文件的名稱。

發生這種情況的另一個原因是 C 和 C++ 源文件都用於創建二進制文件。 編譯器對 C 符號和 C++ 符號使用不同的命名機制。 請閱讀這篇精彩文章中的“Adding C++ To The Picture”部分。 例如,原因之一是 C++ 中的函數重載。 函數的符號名稱包括函數簽名(參數類型及其順序)。 引用這篇文章,“所有關於函數簽名的信息都被破壞成文本形式,並且成為鏈接器看到的符號的實際名稱。 ”所以,當 C 代碼文件需要調用定義的函數時在 C++ 文件中,C 代碼的目標文件僅提及該 C++ 函數的名稱(不包括函數簽名)。 然而,C++ 目標文件包含經過修飾的名稱(其中包括函數簽名)。 因此,鏈接器報告“ error LNK2019: unresolved external symbol FOO_CPP_FUNC referenced in BAR_C_FUNC ”。 建議的解決方案是在 C++ 函數的聲明和定義周圍添加一個 extern "C"。

暫無
暫無

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

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