我试图建立一个嵌套的策略模式。当使嵌套的父类完全虚拟时,出现错误。这个想法可能吗?
例:
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);
(此外,在不相关的注释上,请勿使用下划线和大写字母开头的标识符。这些标识符仅供实现。)