我在編譯我的C++ .NET項目時遇到了問題。LNK2022:元數據操作失敗:重複類型的字段聲明不一致
我已閱讀"LNK2022: metadata operation failed" driving me insane - 這不是我的情況,因爲在我的情況下,我不能編譯一個單一的項目 - 它在鏈接時失敗。我嘗試了來自該主題的所有(兩個)解決方案,但這並沒有幫助我。
這個錯誤在我將類改爲模板類時開始升高。我有Vector2Di(對於int類型)類,現在需要徹底的float類型相同的,所以我把它改名爲的Vector2D,改變它使用模板,現在我有:
template <class T>
public ref class Vector2D : NativeValue<irr::core::vector2d<T>>
{
...
}
typedef Vector2D<int> Vector2Di;
typedef Vector2D<float> Vector2Df;
它開始apear鏈接錯誤:
錯誤LNK2022:元數據操作失敗(80131188):重複類型不一致字段聲明(類型:NativeValue>;字段:m_NativeValue):(0x04000058)。
和
錯誤LNK2022:元數據操作失敗(8013118B):不一致實現的接口重複類型(類型:NativeValue>;接口:System.IDisposable的):(0x09000005)。
這兩種類型的錯誤。
總之細節:的Vector2D打算是C++的ValueType類的Vector2D包裹.NET類(其爲模板太)。我必須將所有功能重定向到包裝類,所以我需要一個存儲它的值,但因爲我不能在ref類中具有非託管的valuetype變量(編譯錯誤apears),所以我使用該值的指針,但是應該分配這個指針並且並且我設計了ref類NativeValue - 它也是模板,它將valuetype存儲爲引用,並注意及時刪除它。
正是在這裏:
template <class T>
ref class NativeValue
{
public:
~NativeValue()
{
this->!NativeValue();
}
!NativeValue()
{
if (m_NativeValue != nullptr)
{
delete m_NativeValue;
m_NativeValue = nullptr;
}
}
internal:
T* m_NativeValue;
protected:
NativeValue() {}
};
此外,另一個奇怪的事情,現在來了。它編譯好,當我將這些類型的用法從cpp文件移動到頭文件時 - 這很奇怪。
我已經預編譯頭stdafx.cpp,以及i包括所有的基本類型(如的Vector2D)在stdafx.h中;那麼每個簡單的文件都包含stdafx.h並使用這些類型。
如果您發現任何可能出錯的地方,請告訴我。 謝謝。