C++ 本征变换算子
我正试图为C++ 本征变换算子,c++,eigen,eigen3,C++,Eigen,Eigen3,我正试图为Eigen::Matrix2d对象编写一个自定义转换运算符,但失败惨重。以下是骨骼代码: #include <iostream> #include <Eigen/Dense> struct MatrixView { operator Eigen::Matrix2d() const // conversion operator { Eigen::Matrix2d tmp; std::cout << "C
Eigen::Matrix2d
对象编写一个自定义转换运算符,但失败惨重。以下是骨骼代码:
#include <iostream>
#include <Eigen/Dense>
struct MatrixView
{
operator Eigen::Matrix2d() const // conversion operator
{
Eigen::Matrix2d tmp;
std::cout << "CONVERSION TRIGERRED\n";
return tmp;
}
};
int main()
{
MatrixView m;
static_cast<Eigen::Matrix2d>(m);
}
但是static\u cast
仍然失败
平台详细信息:
OS X 10.10约塞米蒂,Eigen 3.2.6,g++(MacPorts gcc5 5.2.0_0)5.2.0,Apple LLVM 7.0.0版(clang-700.0.72)目标:x86_64-Apple-darwin14.5.0,都无法编译代码
编辑2
整个问题的发生实际上是因为我的链接指向了Egenen_3.3_alpha1的开发者版本。在Eigen 3.2.x中,它起作用。谢谢@Matt的提示!我将结束这个问题。Eigen有定期生成的开发包。根据Drop的建议,注释中显示了如何检查包含的版本。9月4日发布的alpha版本中有一个返回版本
3.2.91
。使用10月1日发布的版本3.2.6
确实可以正确编译。代码显示为以下版本:
#include <Eigen\src\Core\util\Macros.h>
#include <iostream>
...
std::cout << EIGEN_WORLD_VERSION << "." << EIGEN_MAJOR_VERSION << "." <<
EIGEN_MINOR_VERSION << "\n";
#包括
#包括
...
std::cout该注释提示使您的运算符const
。值得一试。@RollenD'Souza仍然没有区别。。。我实际上编辑了代码并添加了const
,因此现在很明显我没有违反const
-ness.@vsoftco代码中没有任何x
,但它出现在错误消息中。可能是自制的或其他版本的Egen干扰。尝试输出版本:#在使用我获得的开发版本3.2.91
时包括std::cout@vsoftco。确保您包含的是Eigen 3.2.6,而不是一些中间版本。
#include <Eigen\src\Core\util\Macros.h>
#include <iostream>
...
std::cout << EIGEN_WORLD_VERSION << "." << EIGEN_MAJOR_VERSION << "." <<
EIGEN_MINOR_VERSION << "\n";