Ошибка C2512 (Object: нет подходящего конструктора по умолчанию)
Написал два шаблонных класса, один-список, другой-его элементы:
#include <iostream>
using namespace std;
template <typename T>
class Object{
T thing;
Object* next;
Object* prev;
template <class T>
friend class Queue;
public:
Object() : next(nullptr), prev(nullptr) {}
~Object() {}
};
template <typename T>
class Queue {
Object<T>* begin;
Object<T>* end;
public:
Queue() : begin(nullptr), end(nullptr) {}
~Queue() {
while (begin) {
Pick();
}
}
void Pushback() {
Object<T>* a = new Object;
if (begin == nullptr) {
begin = a;
end = a;
}
else {
end->next = a;
a->prev = end;
end = a;
}
}
void Pick(int c = 1) {
for (int i = 0; i < c; i++) {
if (begin == nullptr)
break;
Object<T>* a = begin;
begin = begin->next;
delete a;
}
}
};
Отказывается работать, ссылаясь на отсутствие конструктора по умолчанию у класса Object, указывая на 26 строку.
void Pushback() {
Object<T>* a = new Object;
Не могу понять в чём дело. Что здесь не так?
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Компилятор не может сообразить, а какой объект вы имеете в виду? Он же шаблонный...
Достаточно добавить три символа: <T>
Object<T>* a = new Object<T>;