我正在使用现有的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
是一个托管函数。
我会很感激任何提示!我甚至不知道从哪里开始寻找。
答案 0 :(得分:1)
我对CLI一无所知,但Matrix3f和Matrix4f之间唯一的显着区别是第二个是矢量化的,并且在内部要求其数据与__declspec(align(16))
对齐。