-4

別のクラスpi2cma のオブジェクトを属性としてカスタム クラスを作成しています。ただし、 withの cpp ファイルで直接sigmaのメソッドを直接呼び出そうとすると、次のエラーが発生します。sigmapi2cmasigma.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の親クラスのメソッドをmy で直接使用するにはどうすればよい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
    (...)
}
4

2 に答える 2

0

pi2cma.cpp で

#include "sigma.h" 
于 2013-05-30T16:39:55.327 に答える
0

あなたのコードでsigmaは、関数です:

Eigen::EigenMultivariateNormal<double,DIM> sigma(Eigen::VectorXd,Eigen::MatrixXd);

関数でメンバー関数を呼び出すことはできません。

于 2013-05-30T16:59:52.620 に答える