2014-06-17 58 views
2

完整的消息是:編譯錯誤LNK2019:解析外部符號

錯誤LNK2019:解析外部符號 「__declspec(dllimport的) 公共:虛擬__cdecl FRenderResource ::〜FRenderResource(無效)」 (__imp_? ?1FRenderResource @@ UEAA @ XZ)中函數引用「內部 public: __cdecl FIndexBuffer::FIndexBuffer(class dtor$0 const &)':: 1' ::析構函數$ 0" (?析構函數$ 0 @?0??? 0FIndexBuffer @@ QEAA @ AEBV0 @@ž@ 4HA)

當我這樣寫:

FRawStaticIndexBuffer indBuffer = obj->StaticMesh->RenderData->LODResources[0].IndexBuffer; 

如果我把它改成這樣:

FRawStaticIndexBuffer* indBuffer = &obj->StaticMesh->RenderData->LODResources[0].IndexBuffer; 

樣樣精。但有什麼區別?爲什麼指針是安全的,而不是複製?

+0

@PlasmaHH我會說這是基於問題標題的相關性,但不是基於被問到的實際問題。 –

回答

3

「爲什麼指針是安全的,而不是複製?」

兩者都不安全。

隨着副本,你有錯誤,一個析構函數不是定義。 (缺少符號)

使用指針,即使你的程序目前運行沒有明顯的問題,你有錯誤析構函數沒有被。 (Memory/resource leak

您需要找出爲什麼您的鏈接器在任何地方都找不到FRenderResource::~FRenderResource()的定義,即使您聲明瞭它。

+0

謝謝。 但我用指針寫了一切都很好。程序編譯並運行。 我是C++的newby,但據我所知,析構函數是可選的,如果我不想要,我不需要聲明它們。 在我的例子中有析構函數的實現。 – nikitablack

1

這是因爲一個指針是一個內存地址,所以如果你把某個對象的內存地址(等號右邊的那部分)存儲到一個指針(這是一個內存地址對象)中,只是將一個內存地址保存到一個內存地址對象中,以便它始終能夠正常工作。

就像這樣:鮑勃住在123假街。 123假街是指向鮑勃的指針。鮑勃可能也可能不在家,但他的房子總是在那裏。如果鮑勃不在家,並且你想讓鮑勃進入他的家,那麼他的安全警報就會熄滅。

我同意這些都不是安全的,但是這解釋了正在發生的事情。

相關問題