2016-03-21 61 views
0

我試圖爲一個雙向鏈接列表的節點類建立一個模板文件。每當我嘗試編譯時,我都會遇到這個錯誤。ISO C++禁止聲明沒有類型的「DNode」

ISO C++禁止「DNode」的declatation無類型

似乎在迴應我的函數返回DNode指針出現。我一直在爲此工作好幾天,似乎無法做出正面或反面的評論。

#ifndef DNODE_H 
#define DNODE_H 
#include <cstdlib> 
#include <string> 
#include <iostream> 
#include <iterator> 

template <class T> 
class DNode 
{ 
    public: 
     DNode(T StartingData = T(), DNode* PrevLink = NULL, DNode* NextLink = NULL) 
      {Data = StartingData; previous = PrevLink; next = NextLink;} 

     void setData(T item) 
      {Data = item;} 

     void setNext(DNode *l) 
      {next = l;} 
     void setPrevious(DNode *l) 
      {previous = l;} 

     *DNode getPrevious() {return previous;} 
     *DNode getNext() {return next;} 

     T getData() 
      {return Data;} 

    private: 
     DNode *previous, *next; 
     T Data; 
}; 

#endif 
+1

究竟是'* DNode' in'* DNode getPrevious()'應該是什麼?那是不對的。 –

回答

1

這只是一個錯字:

*DNode getPrevious() {return previous;} 
*DNode getNext() {return next;} 

應該是:

DNode* getPrevious() {return previous;} 
DNode* getNext() {return next;} 

除此之外,代碼看起來不錯。您可能想要使用大括號樣式,某些函數很難讀取,而您的構造函數會更好地作爲mem初始值列表。另外CapCase通常只用於類別名稱,變量更喜歡camelCase(或snake_case,無論哪個)。所以我會這樣編寫你的構造函數:

DNode(T startingData = T(), DNode* prevLink = NULL, DNode* nextLink = NULL) 
    : data(startingData) 
    , previous(prevLink) 
    , next(nextLink) 
{ } 
+0

哇,老實說有點尷尬,我花了那麼多時間尋找這麼小的東西。感謝所有的額外建議。仍然在大學的第一年,我需要殺死所有這些壞習慣 – Gregar543

相關問題