我试图建立一个嵌套的策略模式。当使嵌套的父类完全虚拟时,出现错误。这个想法可能吗?

例:

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文件中。

最佳答案

您需要通过引用(或指针)而不是通过值传递参数。

Jacobi(Jacobi::DiagAlg const& DA);


(此外,在不相关的注释上,请勿使用下划线和大写字母开头的标识符。这些标识符仅供实现。)

10-08 14:41