我正在研究指针和模板,并尝试使用模板创建双链表。编译器将C2955抛出15行。
#include "stdafx.h"
#include <iostream>
using namespace std;
template<typename T>
struct s_node
{
T value;
s_node *p_next;
s_node *p_prev;
};
template<typename T>
s_node* createNode(s_node *p_parent = NULL) {
s_node *p_newNode = new s_node;
p_newNode->value = 0;
p_newNode->p_next = NULL;
if (p_parent != NULL) {
p_parent->p_next = p_newNode;
}
return p_newNode;
}
答案 0 :(得分:1)
错误非常明显:
error C2955: 's_node': use of class template requires template argument list
s_node
是一个类模板。
更改代码如下:
template<typename T>
s_node<T>* createNode(s_node<T> *p_parent = NULL) {
s_node<T> *p_newNode = new s_node<T>();
p_newNode->value = 0;
p_newNode->p_next = NULL;
if (p_parent != NULL) {
p_parent->p_next = p_newNode;
}
return p_newNode;
}
答案 1 :(得分:0)
错误C2955:&#39; s_node&#39;:使用类模板需要模板 参数列表
上述错误对于问题非常明显。
使用s_node *p_newNode = new s_node;
是错误的。你应该这样做:
s_node<T> *p_newNode = new s_node<T>;
您需要模板化类的模板参数。另外,类返回类型必须是:
s_node<T>* createNode(s_node *p_parent = NULL) {
//....
}
旁注:作为推荐,使用nullptr
代替NULL
,它更现代。