我正在处理现有的 Visual Studio 2010 项目,我现在应该将新功能( Eigen 和点云库)添加到现有方法中(我们称之为 foo()
).我现在该项目正在以某种方式使用 C++/CLI。我不得不承认我对 C++/CLI 一无所知,只读了一点。然而,声明和定义 foo()
的类似乎是一个常规的 C++ 类,没有 ref
或任何其他 CLI 标识符。但是在 foo()
中使用了句柄 (var^
)。所以我不太确定 foo()
是否是托管函数!?我可以向此函数添加相当多的常规 C++ 代码,但现在我开始使用 Eigen 和 PCL,并发现了一些神秘的错误。例如,当我声明时:
Eigen::Matrix3f m;
一切正常。但是当我这样做时:
Eigen::Matrix4f m;
我收到以下错误:
error C2711: 'fooclass::foo' : this functon cannot be compiled as managed, consider using #pragma unmanaged
error C3821: 'void fooclass::foo(void)': managed type or function cannot be used in an unmanaged function
所以它适用于 3f 而不是 4f!这太奇怪了,这只是一个例子。我无法识别任何模式。在我的理解中,VS 以某种方式认为 Matrix4f
是一个托管函数。
如有任何提示,我将不胜感激!我什至不知道从哪里开始寻找。
最佳答案
我对 CLI 一无所知,但 Matrix3f 和 Matrix4f 之间的唯一显着区别是第二个是矢量化的,并且在内部要求其数据与 __declspec(align(16))
.
关于c++ - 带有 Eigen 的神秘 C++/CLI 托管/非托管错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21244077/