C ++模板类“没有适当的默认构造函数可用”

Posted

技术标签:

【中文标题】C ++模板类“没有适当的默认构造函数可用”【英文标题】:C++ templated class "no appropriate default constructor available" 【发布时间】:2015-11-14 13:14:59 【问题描述】:

我在 C++ 中为链表创建了一个 Node 类:

template <class T> class Node 
public:
    T val;
    Node* next;
    Node(T val) 
        this->val = val;
        this->next = nullptr;
    
    ~Node() 
        Node<T>* temp = this->next;
        if (temp != nullptr && temp->next != nullptr)
            delete(temp->next);
    
;

当尝试 tp 初始化它时:

definition: 
Node<Device>* devices;
code (in function):
this->devices = new Node<Device>( this->serial_counter, name );

我收到此错误:

错误 C2512“设备”:没有合适的默认构造函数 可用健身房 c:\users\amitm\onedrive\מסמכים\visual studio 2015\projects\gym\gym\node.h 7

第 7 行:

Node(T val) 

此外,如果需要,这是“设备”构造函数:

Device::Device(int id, char* name) 
    this->id = id;
    strcpy(this->name, name);

如何解决此错误?我在网上查了一个多小时,找不到适合我的解决方案。

【问题讨论】:

您是否尝试过在默认构造函数中进行编码?可能会变魔术。 我现在做了,它工作了,但我确实想用数据构建它。一个空的构造函数将不是我所需要的。 您不需要在 C++ 中编写链表类。使用std::list 我知道我有 std::list,但这是 Uni 的一个练习,这是要求。 (如果我去看看 std::list 是如何实现的,我几乎会复制它) 【参考方案1】:

问题是您的 T 类型的值在您的构造函数中被初始化,然后您尝试分配一个新值。如果你想删除错误信息,你需要自己初始化你的值:

Node(T v)
: val(v)
, next(nullptr)

您可以here了解更多信息。

【讨论】:

以上是关于C ++模板类“没有适当的默认构造函数可用”的主要内容,如果未能解决你的问题,请参考以下文章

模板类中的构造函数继承 (C++11)

c++_STL_string类简介

c++_STL_string类简介

c ++ templates为特定类型的类调用特定的构造函数

在外部类中使用类模板时如何定义内部类构造函数?

C++ 为类模板提供初始化列表构造函数