【问题标题】:No appropiate default constructor available when using template classes使用模板类时没有合适的默认构造函数可用
【发布时间】:2010-11-04 09:36:38
【问题描述】:

我有一个这样的模板类:

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

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

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

解决这个问题的正确方法是什么?

【问题讨论】:

    标签: c++ oop class templates constructor


    【解决方案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 的要求从默认可构造更改为可复制构造。列表中的任何类型都需要复制构造函数。

    【讨论】:

    • 当然,您可以将默认 ctor 作为重载添加回来。这意味着T 需要是默认可构造的或可构造的。
    • @NachoSoto:在这种情况下,请随意接受正确的答案(答案左侧的勾号)。
    • 谢谢,这是我的第一个问题,我以为我没有足够的声誉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 2017-08-15
    • 1970-01-01
    • 2011-12-22
    • 2016-01-22
    相关资源
    最近更新 更多