У меня есть этот простой класс (Alpha) и его абстрактный класс (бета). Я не могу передать объекты Alpha (Beta) для функции overwrite(), потому что абстрактный класс не может обрабатывать объекты типа self.C++ - «Невозможно объявить параметр« анонимным »для абстрактного типа»
#include <iostream>
using std::cout;
using std::endl;
using std::ostream;
class Beta {
public:
virtual int read() const = 0;
virtual void write(int) = 0;
virtual void overwrite(Beta) = 0; // <-- This is the problem
};
class Alpha : public Beta {
public:
int read () const;
void write (int);
void overwrite(Alpha);
private:
int value;
};
int Alpha::read() const {
return value;
}
void Alpha::write(int v) {
value = v;
}
void Alpha::overwrite(Alpha A) {
value = A.value;
}
int main() {
Alpha A, B;
A.write(8);
B.write(6);
cout << "A: " << A.read() << endl; // 8
cout << "B: " << B.read() << endl; // 6
A.overwrite(B);
cout << endl << "A: " << A.read(); // 6
return 0;
}
Это дает мне [Error] cannot declare parameter '<anonymous>' to be of abstract type 'Beta'
. Как с этим бороться? Это небольшой пример кода, но мне нужно решить это, потому что я не могу перегрузить операторы и правильно объявить этот тип функций.
Я сделал это, и это показало другую ошибку: Невозможно объявить переменную «А» абстрактной типа «Альфа», потому что следующие «виртуальные» функции чисты в «Альфе»: virtual void Beta :: overwrite (Beta &) – AndroidGuy
@AndroidGuy Именно это я и сказал, что это произойдет, если вы не изменили подпись 'Alpha :: overwrite'. – CoryKramer
Прошу прощения, я не понял. – AndroidGuy