gre*_*zer 5 .net c++ c++-cli linker-errors 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)
此外,现在又出现了另一件奇怪的事情.当我将这些类型的使用从cpp文件转移到标题时,它编译正常 - 这很奇怪.
我有预编译头stdafx.cpp,我在stdafx.h中包含所有基本类型(如Vector2D); 然后每个简单的文件都包含stdafx.h并使用这些类型.
如果你看到任何可能的错误,请告诉我.谢谢.
| 归档时间: |
|
| 查看次数: |
3561 次 |
| 最近记录: |