0

Baseクラスの保護されたメンバーにアクセスしようとすると、次のクラスがありますが、「フィールドファクタリングを解決できませんでした」というエラーが発生します。誰かが私に何が間違っているのか説明できますか?変数にアクセスできないのはなぜmFactorizedですか?

基本クラス

template <typename ValueType>
class AbstractDirectLinearSolver{
protected:
    bool mFactorized;
public:
    //Constructors, destructor
    AbstractDirectLinearSolver(){
        mFactorized = false;
    }

    virtual ~AbstractDirectLinearSolver();

    //Methods
    virtual void Solve(Vector<ValueType>& x, const Vector<ValueType>& b) const = 0;
    virtual void Factorize(AbstractMatrix<ValueType>& A) = 0;
};

派生クラス

#include "AbstractDirectLinearSolver.hpp"

template<typename ValueType>
class CholeskySolver: public AbstractDirectLinearSolver {
private:
    AbstractMatrix<ValueType> *mR; //Pointer = Abstract class NOT ALLOWS instantiation !!
public:
    CholeskySolver() {
        mR = NULL;
    }

    ~CholeskySolver() {
        if (this->mFactorized) {  //ERROR HERE
            delete mR;
        }
    }

    void Solve(const Vector<ValueType>& x, const Vector<ValueType>& b) {
        Vector<ValueType> y(mR->ApplyLowInv(b));
        x = mR->ApplyLowerTransponse(y);
    }

    void Factorize(AbstractMatrix<ValueType>& A) {
        if (mR != NULL)
            delete mR;
        mR = NULL;
        A.CholeskyFactorization(mR);
        this->mFactorized;           //ERROR HERE
    }
};
4

2 に答える 2

2

クラスではなく、クラステンプレートから継承しようとしています。クラスヘッダーを次のように変更します。

template<typename ValueType>
class CholeskySolver: public AbstractDirectLinearSolver<ValueType>
                                                       ^^^^^^^^^^^

コンパイラーmFactorizedは、メンバーではないと文句を言った後(基本クラスについて知らなかったため)、基本クラス指定子が無効であると文句を言う前に、ベイルアウトしたように見えます。

問題のある行をコメントアウトすると、わずかに良い(まだかなり紛らわしい)エラーが発生しますexpected class-name before ‘{’ token

于 2012-11-23T11:44:32.880 に答える
0
if (this->Factorized) 

する必要があります

if (this->mFactorized)

2番目のエラー...

this->mFactorized;           //ERROR HERE

何もしないということを除けば……問題ないと思います。

于 2012-11-23T11:30:00.380 に答える