0

ネストされた戦略パターンを作成しようとしていました。ネストされた親クラスを純粋に仮想化するときにエラーが発生します。このアイデアは可能ですか?

例:

class Jacobi {
 private:
  mat _V, _A;
  int _n, _rotations;

 public:
  class DiagAlg {
  public:
  virtual void diagonalize() = 0;
  };
  class Cyclic : DiagAlg {
  public:
    void diagonalize();
  };

  vec getE();
  mat getV();
  mat getA();
  int getRotations();
  Jacobi(Jacobi::DiagAlg DA);
  Jacobi(const mat& A); // could be done without user supply of base vectors
  bool rotate(int p, int q);

};

次のエラーが発生します。

jacobi.h:28:26: error: cannot declare parameter ‘DA’ to be of abstract type ‘Jacobi::DiagAlg’
jacobi.h:15:9: note:   because the following virtual functions are pure within ‘Jacobi::DiagAlg’:
jacobi.h:17:16: note:   virtual void Jacobi::DiagAlg::diagonalize()

実装は原因の cpp ファイルにあります。

4

2 に答える 2

2

値ではなく参照 (またはポインター) でパラメーターを渡す必要があります。

Jacobi(Jacobi::DiagAlg const& DA);

(また、無関係な注意として、アンダースコアと大文字で始まる識別子を使用しないでください。これらは実装のために予約されています。)

于 2013-06-07T17:04:20.693 に答える