编译时错误:预期的构造函数,析构函数或转换

时间:2011-08-29 02:44:41

标签: c++ xcode

我需要一些帮助

这段代码看起来不错吗?

#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;

我在调试器中出现“*”“错误之前一直得到”预期的构造函数,析构函数或转换?在最后两行我做错了什么? :(

3 个答案:

答案 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;