如何用模板制作链表

问题描述 投票:0回答:1

我在分发模板时遇到问题。我尝试使用不同的语法,但没有成功地显示错误文本:

error C2512: 'node': no appropriate default constructor available

获取代码

#include<iostream>
using namespace std;
template<class t>
class node {
    public:
        t data;
        node<t> * next;
};
template<class t>
class linkedlist {
    node<t>* head;
public:
    linkedlist() { head = NULL; }
    bool isempty() {
        return head == NULL;
    }
    void insertf(t value) {
        node<t>* newnode = new node;

        newnode->data = value;
        newnode->next = NULL;
        if (isempty()) {
            head = newnode;
        }
        else {
            newnode->next = head;
            head = newnode;
        }
    }
    void display() {
        node<t>* tem;
        tem = head;
        while (tem != NULL) {
            cout << tem->data<<" ";
            tem = tem->next;
        }
    }
};
c++ arrays templates dynamic-memory-allocation singly-linked-list
1个回答
0
投票

始终从阅读first错误消息开始。

error C2512: 'node': no appropriate default constructor available

这不是第一个。完整的错误是:

<source>(18): error C2641: cannot deduce template arguments for 'node'
<source>(18): note: the template instantiation context (the oldest one first) is
<source>(10): note: while compiling class template 'linkedlist'
<source>(18): error C2783: 'node<t> node(void)': could not deduce template argument for 't'
<source>(4): note: see declaration of 'node'
<source>(18): error C2780: 'node<t> node(node<t>)': expects 1 arguments - 0 provided
<source>(4): note: see declaration of 'node'
<source>(18): error C2512: 'node': no appropriate default constructor available

(如果您没有看到此内容,请确保查看

Output
选项卡而不是
Errors
。)

第一个错误指向这一行:

node<t>* newnode = new node;

如果不清楚,

cannot deduce template arguments for 'node'
,意味着你在
<t>
之后错过了
node


此外,对于未来的问题,请确保在

Output
选项卡中提供完整的错误。

此外(您可以在here检查),除非您尝试调用

insertf()
添加
/std:c++latest
编译器标志,否则您不会收到错误。此信息必须在问题中(您省略了一些代码,或者没有说明您使用的编译器标志)。

© www.soinside.com 2019 - 2024. All rights reserved.