Нет подходящего конструктора по умолчанию, доступного при использовании шаблонных классов - PullRequest
0 голосов
/ 04 ноября 2010

У меня есть шаблон класса так:

template<class T>
class List
{
private:
    struct node
    {
        T value; 
        node *next, *prev;
    };
}

При создании экземпляров этого класса List с T = myClass * У меня нет проблем, поскольку значение будет указателем, но если это объект, создание экземпляра узла приводит к ошибке «Нет доступного конструктора по умолчанию», если класс не имеет конструктора по умолчанию.

Я мог бы решить эту проблему, изменив значение T на значение T *, но мне нужно иметь копии этих значений внутри списка, чтобы в случае их удаления вне списка они оставались действительными здесь.

Каков будет правильный путь к этому?

1 Ответ

1 голос
/ 04 ноября 2010

Вы можете предоставить конструктор для node, для которого требуется экземпляр T, из которого можно создать копию:

template<class T>
class List
{
private:
    struct node
    {
        node(const T & init_value) : value(init_value) {}
        T value; 
        node *next, *prev;
    };
}

Это изменит требование на T с конструктива по умолчанию на копируемый. Любой тип в вашем списке потребует конструктора копирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...