具有Eigen的神秘C ++ / CLI托管/非托管错误

时间:2014-01-20 21:02:06

标签: c++ visual-studio-2010 c++-cli command-line-interface eigen

我正在使用现有的Visual Studio 2010项目,我现在应该在现有方法中添加新功能(Eigen和Point Cloud Library)(让我们称之为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是一个托管函数。

我会很感激任何提示!我甚至不知道从哪里开始寻找。

1 个答案:

答案 0 :(得分:1)

我对CLI一无所知,但Matrix3f和Matrix4f之间唯一的显着区别是第二个是矢量化的,并且在内部要求其数据与__declspec(align(16))对齐。