我需要一些帮助
这段代码看起来不错吗?
#include "programass.h"
#include <cstdlib>
#include <iostream>
#include <string>
#include "Student.h"
using namespace std;
template<class emptyValue>
struct DoublyLinkedNode
{
emptyValue data;
DoublyLinkedNode *prev, *next;
};
typedef DoublyLinkedNode<int> numListNode;
DoublyLinkedNode *listHead = NULL;
DoublyLinkedNode *listTail = NULL;
我在调试器中出现“*”“错误之前一直得到”预期的构造函数,析构函数或转换?在最后两行我做错了什么? :(
答案 0 :(得分:3)
你做了
typedef DoublyLinkedNode<int> numListNode;
但接下来的两行
DoublyLinkedNode *listHead = NULL;
DoublyLinkedNode *listTail = NULL;
您忘记使用新的numListNode
类型。将它们更改为
numListNode *listHead = NULL;
numListNode *listTail = NULL;
因为您不能在没有模板参数的情况下使用模板类,并且当DoublyLinkedNode *listHead
应该DoublyLinkedNode<something> *listHead
时,您尝试执行typedef
。因此,如果您使用指定模板参数的int
({{1}}),它就会起作用。
答案 1 :(得分:1)
我确信你想在两个指针的声明中使用numListNode而不是DoublyLinkedNode。
numListNode* listHead = NULL;
numListNode* listTail = NULL;
在旁注中,我建议删除template <class emptyValue>
和struct DoublyLinkedNode
之间的空白行,并使用样式Type* ptr;
代替Type *ptr;
,这样就更好了。
答案 2 :(得分:1)
Seth是对的,但是如果我理解正确的话,你正在尝试构建一个通用数据类型,因此希望列表头部和尾部也是模板化的。为此你需要一个容器结构,它也可以保存它们:
template < typename emptyValue >
struct List
{
struct DoublyLinkedNode
{
emptyValue data;
DoublyLinkedNode *prev, *next;
};
DoublyLinkedNode *head;
DoublyLinkedNode *tail;
....
}
typedef List<int> numList;