внутренние классы — шаблон вложенной стратегии c ++, чисто виртуальная ошибка

Я пытался сделать шаблон вложенной стратегии. Я получаю ошибку, как при создании вложенного родительского класса чисто виртуального. Эта идея вообще возможна?

Пример:

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 причины.

0

Решение

Вам нужно передать параметр по ссылке (или указателю), а не по значению.

Jacobi(Jacobi::DiagAlg const& DA);

(Кроме того, на несвязанной заметке не используйте идентификаторы, начинающиеся с подчеркивания и заглавной буквы. Они зарезервированы для реализации.)

2

Другие решения

По правилам нельзя создавать экземпляр абстрактного класса. Ваша передача ценностью заставляет это. добавлять & или const& чинить.

1

По вопросам рекламы [email protected]