实现一个跳过列表,语法错误:在';'之前缺少')'

时间:2014-12-03 14:09:30

标签: c++

我遇到了这个问题,我在跳过列表实现中遇到了奇怪的语法错误,并且严重不知道是什么原因造成的。

这是代码:

skipnode.h:

template <typename T>
class SkipNode
{
public:
    T data;
    SkipNode<T> **next;
    SkipNode(T d, int level);
    ~SkipNode();
};

skipnode.cpp

#include "skipnode.h"
template<typename T>
SkipNode<T>::SkipNode(T d, int level)
{
    data = d;
    next = new SkipNode<T>*[level];

    for (int i = 0; i <= level; i++)
        next[i] = 0;
}

template<typename T>
SkipNode<T>::~SkipNode()
{
    delete [] next;
}

Skiplist.h

#include "skipnode.cpp"
#define MAXLEVEL 4;
template<typename T>
class SkipList
{
public:
    SkipList();
    ~SkipList();
    int randLvl(int max);
    T search(T);
    void insert(T);
private:
    SkipNode<T> *root; 
};

Skiplist.cpp

#include "skiplist.h"
template<typename T>
SkipList<T>::SkipList()
{
    root = new SkipNode<T>(0,MAXLEVEL);
}

当我在Skiplist()中声明root时,我收到以下错误:

 error C2143: syntax error : missing ')' before ';'

任何人都可以帮助我吗?提前谢谢。

编辑:固定代码,因此show include

2 个答案:

答案 0 :(得分:4)

问题的根本原因在于:

#define MAXLEVEL 4;

分号出现在宏扩展中,因此在预处理程序通过后你最终会得到:

root = new SkipNode<T>(0, 4;);

这是语法错误(在右括号之前的额外分号)。

要修复它,请在宏定义中省略分号:

#define MAXLEVEL 4

答案 1 :(得分:2)

您需要包含skipnode.h,或者至少声明

template <typename T> class SkipNode;

之前,您可以在SkipNode的定义中使用名称SkipList

您也(几乎可以肯定)需要在标题中定义模板成员函数,而不是源文件,如here所述。

你也遇到了问题

#define MAXLEVEL 4;

将扩展为4;,在表达式中间插入一个流氓;。使用破损少的宏

#define MAXLEVEL 4

或者更好的是语言级常量

const int max_level = 4;