MatrixXd&类型的前向声明VectorXd?

时间:2015-01-03 21:52:20

标签: c++ eigen forward-declaration

也许有人知道,Eigen是否有可能转发声明类型 MatrixXd &的 VectorXd

编译时,我收到以下错误:

/usr/include/eigen3/Eigen/src/Core/Matrix.h:372:34:错误:冲突声明'typedef类Eigen :: Matrix Eigen :: MatrixXd'

typedef Matrix Matrix ## SizeSuffix ## TypeSuffix;

SIMP.h

#ifndef SIMP_H
#define SIMP_H


namespace Eigen
{
    class MatrixXd;
    class VectorXd;
}

class SIMP {
public:
    SIMP(Eigen::MatrixXd * gsm, Eigen::VectorXd * displ);
    SIMP ( const SIMP& other ) = delete;
    ~SIMP(){}
    SIMP& operator= ( const SIMP& other ) = delete;
    bool operator== ( const SIMP& other ) = delete;


private:      
    Eigen::MatrixXd * m_gsm;
    Eigen::VectorXd * m_displ;

};

#endif // SIMP_H

SIMP.cpp

#include "SIMP.h"
#include <Eigen/Core>
SIMP::SIMP( Eigen::MatrixXd * gsm, Eigen::VectorXd * displ) :
    m_gsm(gsm),
    m_displ(displ), 
{

}

2 个答案:

答案 0 :(得分:2)

不,你不能&#34;转发声明&#34;类型别名:MatrixXdVectorXd都不是class es;它们是类型别名。

您可以做的最好的事情是通过写出typedef语句手动引入类型别名。这可能是一个坏主意。

BT,最后一行输出是高度可疑的;它看起来像一个宏定义,绝对不会出现编译器错误。

答案 1 :(得分:0)

你可以这样做:

namespace Eigen {
    template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
    class Matrix;
    using MatrixXd = Matrix<double, -1, -1, 0, -1, -1>;
    using VectorXd = Matrix<double, -1, 1, 0, -1, 1>;
}