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

编译时,出现以下错误:

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

typedef 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),
{

}

最佳答案

不,您不能“转发声明”类型别名:MatrixXdVectorXd都不是class es;它们是类型别名。

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

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

07-24 13:30