Как-то после определения AbstractClass я не могу получить производный класс, возвращающий объект производного класса. В чем проблема с следующим кодом?Аннотация Наследование классов
Спасибо.
Код:
#include <iostream>
using namespace std;
template <typename T>
class AbstractClass {
public:
virtual AbstractClass<T> operator[](int index) = 0;
} ;
template <typename T>
class ClassA : public AbstractClass<T> {
public:
ClassA<T> operator[](int index){
ClassA<T> A;
return A;
}
} ;
template <typename T>
class ClassB : public ClassA<T> {
public:
ClassA<T> operator[](int index){
ClassA<T> A;
return A;
}
} ;
int main(void){
ClassA<int> A;
A[0][1][2];
}
Ошибка:
test2.cpp(11): error: return type is neither identical to nor covariant with return type "AbstractClass<int>" of overridden virtual function "AbstractClass<T>::operator[] [with T=int]"
ClassA<T> operator[](int index){
Изменение эталону дает предупреждение о возврате локальной переменной:
#include <iostream>
using namespace std;
template <typename T>
class AbstractClass {
public:
virtual AbstractClass<T>& operator[](int index) = 0;
} ;
template <typename T>
class ClassA : public AbstractClass<T> {
public:
ClassA<T>& operator[](int index){
ClassA<T> A;
return A;
}
} ;
template <typename T>
class ClassB : public ClassA<T> {
public:
ClassA<T>& operator[](int index){
ClassA<T> A;
return A;
}
} ;
int main(void){
ClassA<int> A;
A[0][1][2];
}
Предупреждение
test2.cpp(13): warning #879: returning reference to local variable
return A;
^
detected during instantiation of "ClassA<T> &ClassA<T>::operator[](int) [with T=int]" at line 26
И я не знаю, как вернуть новый объект, если я вернусь по ссылке.
Некоторые люди предложили мне реализовать конструктор перемещения. Но, я обнаружил, что конструктор перемещения и шаблон не работают вместе: Move operator with templates
Есть ли решение?
, прежде чем вниз голосования. скажите, что не так в коде/вопросе. Я попытаюсь исправить. – rxu
Что неясно о сообщении об ошибке на самом деле? –
Почему метод класса A не может вернуть класс A, несмотря на то, что абстрактный класс говорит, что метод может возвращать абстрактный класс, а класс A получен из абстрактного класса? Или каково решение, чтобы методы classA и classB возвращали classA? – rxu