标签: lnk2022

LNK2022:元数据操作失败:重复类型中的字段声明不一致

编译我的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)

.net c++ c++-cli linker-errors lnk2022

5
推荐指数
1
解决办法
3561
查看次数

链接器错误:LNK2022

我试图在具有公共语言运行时支持的项目中使用boost线程.我收到以下链接器错误.错误LNK2022:元数据操作失败(8013119F):存在TypeRef,它应该但不具有相应的TypeDef :(虚拟):( 0x01000073).

如果我评论实例化boost线程的行,我不会得到任何链接器错误.

我尝试在线查找修复此错误,在一个这样的地方建议在包含任何boost库之前使用"#define BOOST_THREAD_USE_DLL".我试过这个,但它仍然给我同样的错误.

有一个相关的线程,("LNK2022:元数据操作失败"让我疯狂)但它不是同样的问题,但有点类似.我尝试了修复建议,但仍然没有运气.

有谁知道如何解决这一问题?

c++ visual-c++ lnk2022

2
推荐指数
1
解决办法
3076
查看次数

标签 统计

c++ ×2

lnk2022 ×2

.net ×1

c++-cli ×1

linker-errors ×1

visual-c++ ×1