c ++嵌套策略模式,纯虚拟错误

时间:2013-06-07 16:49:24

标签: c++ inner-classes nested-class pure-virtual

我试图制作一个嵌套的策略模式。我在使嵌套父类纯粹虚拟时遇到错误。这个想法甚至可能吗?

示例:

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()

实现将在cause的cpp文件中。

2 个答案:

答案 0 :(得分:2)

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

Jacobi(Jacobi::DiagAlg const& DA);

(另外,在不相关的注释中,不要使用以下划线和大写字母开头的标识符。这些是为实现保留的。)

答案 1 :(得分:1)

按规则,您无法创建抽象类的实例。你通过值强迫它。添加&或者const&修复。

相关问题