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";