使用模板类时没有适当的默认构造函数

时间:2010-11-04 09:36:39

标签: c++ oop class templates constructor

我有一个像这样的模板类:

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

当使用T = myClass *创建此List类的实例时,我没有问题,因为value将是一个指针,但如果它是一个对象,则创建一个节点实例会导致“No appropiate default constructor available”错误,如果这样class没有默认构造函数。

我可以通过将T值更改为T *值来解决这个问题,但我需要在列表中包含这些值的副本,这样如果它们在列表之外被删除,它们在此处仍然有效。

接受这种方法的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以为node提供一个构造函数,该构造函数需要一个T实例,可以从中构建一个副本:

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

这会将T的要求从默认可构造更改为可复制构造。列表中的任何类型都需要复制构造函数。