C++ Matrix XXD&;类型的转发声明;向量xd?

C++ Matrix XXD&;类型的转发声明;向量xd?,c++,eigen,forward-declaration,C++,Eigen,Forward Declaration,也许有人知道,在Eigen中是否可以转发声明类型MatrixXd&VectorXd 编译时,出现以下错误: /usr/include/eigen3/Eigen/src/Core/Matrix.h:372:34:错误:声明“typedef-class-Eigen::Matrix-Eigen::Matrix-xxd”冲突 typedef矩阵矩阵##大小uffix##TypeSuffix SIMP.h #ifndef SIMP_H #define SIMP_H namespace Eigen {

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

编译时,出现以下错误:

/usr/include/eigen3/Eigen/src/Core/Matrix.h:372:34:错误:声明“typedef-class-Eigen::Matrix-Eigen::Matrix-xxd”冲突

typedef矩阵矩阵##大小uffix##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), 
{

}
#包括“SIMP.h”
#包括
SIMP::SIMP(本征::矩阵xD*gsm,本征::矢量xD*显示):
m_gsm(gsm),
m_显示(显示),
{
}
否,您不能“正向声明”类型别名:无论是
MatrixXd
还是
VectorXd
都不是
class
es;它们是类型别名

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


顺便说一句,最后一行输出是高度可疑的;它看起来像一个宏定义,编译器错误中肯定不会出现宏定义。

您可以这样做:

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>;
}
名称空间特征{
模板
类矩阵;
使用矩阵xXD=矩阵;
使用VectorXd=矩阵;
}

有一些用于设置显式模板的自动typedef=)