0

私が間違っていることを見つけるには、別の目が必要だと思います。

これはエラーです:

bfgs_template.hpp:478:5: error: ‘di’ was not declared in this scope
bfgs_template.hpp:478:8: error: ‘b’ was not declared in this scope

これはコードのスナップショットです。

template<typename T>
void update_d();

template<typename T>
class BFGSB: public BFGS<T>{
protected:
  double *di;
  int b;
public:
  friend void update_d<T>();
};


template<typename T>
void update_d(){
    di[b] = 0.0; 
}

ところで。残りのコードは投稿していませんが。di が初期化され、 update_d をクラスのメンバーにすると。すべてがスムーズに実行されます。

4

1 に答える 1

4

update_dが のフレンドだからといって、やBFGSBにアクセスできるとは限りません。これは、他の関数と同様に非メンバー関数です。andの特定のインスタンスに関連付けられていないため、アクセスする特定のまたはオブジェクトはありません。フレンドにするということは、オブジェクトのおよびメンバーへのアクセスを許可するということです。たとえば、次のようにすることができます。dibBFGSBdibdibBFGSB

template<typename T>
void update_d(){
    BFGSB<T> obj; // We can access the privates of this object
    obj.di[obj.b] = 0.0; 
}
于 2013-04-27T21:50:01.557 に答える