我在分发模板时遇到问题。我尝试使用不同的语法,但没有成功地显示错误文本:
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;
}
}
};
始终从阅读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
编译器标志,否则您不会收到错误。此信息必须在问题中(您省略了一些代码,或者没有说明您使用的编译器标志)。