C ++模板化类“没有合适的默认构造函数”

时间:2015-11-14 13:14:59

标签: c++ visual-c++ template-classes

我在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);
    }
};

当尝试初始化它时:

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

我收到此错误:

  

错误C2512'Device':没有合适的默认构造函数   可用健身房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);
}

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

1 个答案:

答案 0 :(得分:6)

问题是您的构造函数中初始化了类型T的值,然后尝试分配新值。如果要删除错误消息,则需要自己初始化值:

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

您可以获得更多信息here