我正在创建一个自定义类pi2cma
,其中包含来自另一个类的对象sigma
作为属性。但是,当我尝试使用sigma
直接在pi2cma
的cpp文件中直接调用sigma.setMean(MN);
的方法时,我收到错误:
./src/pi2cma.cpp:54:7: error: ‘((pi2cma*)this)->pi2cma::sigma’ does not have class type
但是,如果我为类pi2cma
创建一个完全相同的中间方法
void pi2cma::set_MN(Eigen::VectorXd _mean){sigma.setMean(_mean);}
没有报错!
如何直接在sigma
中使用pi2cma.cpp
的父类的方法?
编辑:包含在pi2cma.cpp
#include "eigen_multivariate_normal.hpp"
#include "pi2cma.hpp"
#include <iostream>
#include <cmath>
#include <boost/random.hpp>
//aditional libraries for multivariate matrix manipulation
#include <boost/tr1/random.hpp>
#include <Eigen/Dense>
(...)
并在pi2cma.hpp:
(...)
// mean and covariance matrices
Eigen::VectorXd MN;
Eigen::MatrixXd CVM;
// multivariate normal distribution
Eigen::EigenMultivariateNormal<double,DIM> sigma(Eigen::VectorXd,Eigen::MatrixXd);
(...)
EigenMultivariteNormal
中的eigen_multivariate_normal.hpp
课程:
template<typename Scalar, int Size>
class EigenMultivariateNormal
{
Matrix<Scalar,Size,Size> _covar;
Matrix<Scalar,Size,Size> _transform;
Matrix< Scalar, Size, 1> _mean;
internal::scalar_normal_dist_op<Scalar> randN; // Gaussian functor
public:
EigenMultivariateNormal(const Matrix<Scalar,Size,1>& mean,const Matrix<Scalar,Size,Size>& covar)
{
setMean(mean);
setCovar(covar);
}
void setMean(const Matrix<Scalar,Size,1>& mean) { _mean = mean; }
void setCovar(const Matrix<Scalar,Size,Size>& covar) {
_covar = covar;
SelfAdjointEigenSolver<Matrix<Scalar,Size,Size> > eigenSolver(_covar);
_transform = eigenSolver.eigenvectors()*eigenSolver.eigenvalues().cwiseMax(0).cwiseSqrt().asDiagonal();
}
Matrix<Scalar,Size,-1> samples(int nn)
{
return (_transform * Matrix<Scalar,Size,-1>::NullaryExpr(Size,nn,randN)).colwise() + _mean;
}
};
我在pi2cma.cpp
打电话:
void pi2cma::init(long init_exp){
(...)
sigma.setMean(MN); // error
set_MN(MN); // works
(...)
}
答案 0 :(得分:0)
#include "sigma.h"
答案 1 :(得分:0)
在您的代码中,sigma
是一个函数:
Eigen::EigenMultivariateNormal<double,DIM> sigma(Eigen::VectorXd,Eigen::MatrixXd);
您无法在函数上调用成员函数。