将类型 MatrixXd 转发到 VectorXd?
Forward declaration of types MatrixXd & VectorXd?
也许有人知道,Eigen中是否可以转发声明类型MatrixXd & VectorXd?
编译时出现以下错误:
/usr/include/eigen3/Eigen/src/Core/Matrix.h:372:34: 错误:冲突声明 'typedef class Eigen::Matrix Eigen::MatrixXd'
typedef 矩阵矩阵##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),
{
}
不,您不能 "forward declare" 键入别名:MatrixXd
和 VectorXd
都不是 class
;它们是类型别名。
你能做的最好的事情就是通过写出 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>;
}
也许有人知道,Eigen中是否可以转发声明类型MatrixXd & VectorXd?
编译时出现以下错误:
/usr/include/eigen3/Eigen/src/Core/Matrix.h:372:34: 错误:冲突声明 'typedef class Eigen::Matrix Eigen::MatrixXd'
typedef 矩阵矩阵##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),
{
}
不,您不能 "forward declare" 键入别名:MatrixXd
和 VectorXd
都不是 class
;它们是类型别名。
你能做的最好的事情就是通过写出 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>;
}