编译我的C++ .NET项目时遇到问题.
我读过"LNK2022:元数据操作失败"让我疯了 - 这不是我的情况,因为在我的情况下我无法编译一个项目 - 它在链接时失败.我尝试了该主题的所有(两个)解决方案,这对我没有帮助.
当我将类更改为模板类时,这个错误开始上升.我有Vector2Di(对于int类型)类,现在需要完全相同的float类型,所以我将其重命名为Vector2D并将其更改为使用模板,现在我有:
template <class T>
public ref class Vector2D : NativeValue<irr::core::vector2d<T>>
{
...
}
typedef Vector2D<int> Vector2Di;
typedef Vector2D<float> Vector2Df;
Run Code Online (Sandbox Code Playgroud)
它开始出现apear链接器错误:
错误LNK2022:元数据操作失败(80131188):重复类型中的字段声明不一致(类型:NativeValue>; fields:m_NativeValue):( 0x04000058).
和
错误LNK2022:元数据操作失败(8013118B):重复类型中实现的接口不一致(类型:NativeValue>; interfaces:System.IDisposable):( 0x09000005).
这两种错误.
简而言之:Vector2D打算成为C++ valuetype类vector2d的包装.NET类(也是模板).我必须将所有功能重定向到wrappered类,所以我需要一个存储它的值,但因为我不能在ref类中使用非托管的valuetype变量(编译错误apears),我在该valuetype上使用指针,但是这个指针应该被分配,在某处解除分配,我设计了ref class 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() {}
}; …Run Code Online (Sandbox Code Playgroud) 我试图在具有公共语言运行时支持的项目中使用boost线程.我收到以下链接器错误.错误LNK2022:元数据操作失败(8013119F):存在TypeRef,它应该但不具有相应的TypeDef :(虚拟):( 0x01000073).
如果我评论实例化boost线程的行,我不会得到任何链接器错误.
我尝试在线查找修复此错误,在一个这样的地方建议在包含任何boost库之前使用"#define BOOST_THREAD_USE_DLL".我试过这个,但它仍然给我同样的错误.
有一个相关的线程,("LNK2022:元数据操作失败"让我疯狂)但它不是同样的问题,但有点类似.我尝试了修复建议,但仍然没有运气.
有谁知道如何解决这一问题?