我遇到了这个问题,我在跳过列表实现中遇到了奇怪的语法错误,并且严重不知道是什么原因造成的。
这是代码:
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
答案 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;