2014-12-03 82 views
-3

我遇到了這個問題,在我的跳過列表實現中出現奇怪的語法錯誤,並且嚴重地不知道會導致這種情況。實現跳過列表,語法錯誤:在'之前'缺少')';'

這是代碼:

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聲明根()我收到以下錯誤:

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

誰能幫助我嗎?提前致謝。

編輯:固定的代碼,所以演出內容包括

+5

編譯器通常顯示行數時,他們報告這種錯誤...... – dandan78 2014-12-03 14:10:43

回答

4

你的問題的根本原因是在這裏:

#define MAXLEVEL 4; 

分號是出現在宏擴展,所以在預處理程序通過後,最終得到:

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

這是一個語法錯誤(右括號之前的額外分號)。

爲了解決這個問題,省去您的宏定義分號:

#define MAXLEVEL 4 
+0

非常感謝!如果我發佈我的整個代碼,你能幫我解決這個問題嗎? [鏈接](http://i.imgur.com/EiP8ewN) – Thisen 2014-12-03 14:31:17

+0

@ Thisen,這個問題是堆腐敗,最有可能觸發緩衝區溢出。您應該詢問另一個問題,但請務必事先調試調試器。 – 2014-12-03 14:33:15

+0

會做,再次感謝。 – Thisen 2014-12-03 14:34:06

2

您需要包括skipnode.h,或至少聲明

template <typename T> class SkipNode; 

,然後才能在SkipList的定義中使用的名稱SkipNode

您還(幾乎可以肯定)需要在頭文件中定義模板成員函數,而不是源文件,如here所述。

也有

#define MAXLEVEL 4; 

一個問題,這將擴大到4;,在表達式中插入一個流氓;。用一個不太壞的宏

#define MAXLEVEL 4 

,或者更好的是,一個語言水平不變

const int max_level = 4; 
+0

我包括「skipnode.cpp」 「skiplist.h」。如果這不起作用? – Thisen 2014-12-03 14:16:08

+0

@ Thisen:是的,雖然這是一個相當混亂的組織代碼的方法,因爲'.cpp'通常意味着可編譯的源文件,而不是頭文件片段。我不確定現在問題是什麼,你已經改變了這個問題。也許你可以告訴我們哪一行代碼導致錯誤。 – 2014-12-03 14:18:23

相關問題