Fellas, почему этот код не работает?Оператор шаблона, возвращающий ссылку на абстрактный класс
template <typename t>
class Abstract
{
public:
~Abstract(){}
virtual Abstract<t>& operator +(Abstract<t>&) = 0;
};
template <typename t>
class Not_Abstract : public Abstract
{
t* tab; //let Not_Abstract store an array of objects of type t, whatever
public:
~Not_Abstract(){ delete[] tab; }
Not_Abstract<t>& operator +(Not_Abstact<t>&);
};
Я, хотя это потому, что ссылка является указателем, тогда я не знаю, оба определения оператора эквивалентны; но они кажутся отдельными функциями. Есть ли что-то, что можно сделать, чтобы сохранить виртуальный оператор в «Абстрактном» и все еще работать с кодом?
Компилятор должен дать ясную ошибку. Изменить: Clang дает * ошибку: ожидаемое имя класса * в строке декларации 'Not_Abstract'. Это не кристально понятно, но 'Abstract' - это шаблон, а не класс. Кроме того, простая опечатка - явная ошибка, и она компилируется в противном случае. Не знаете, в чем проблема. – chris
Мы не _Fellas_ мы * кодеры *. Совершенно разные. :) – ForceBru
@chris Вы можете явно указать его: они должны наследовать от 'Abstract'. –
Angew