2010-10-29 65 views
0

我是C++新手。下面是代碼:簡單的C++模板定義問題

template <class T> typename lw_slist { 
    // .... some code 
    private:  

     typedef struct _slist_cell { 
      _slist_cell *next; 
      T data; 
     } slist_cell; 

     lw_slist::slist_cell *root; 
}; 

給這個編譯錯誤:

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

爲什麼?

回答

1

一個全新的問題,一個全新的答案:

我認爲你會希望它是這樣的:

template <class T> 
class lw_slist { 
    // .... some code 
    private:  
     struct slist_cell { 
      slist_cell *next; 
      T data; 
     }; 

     slist_cell *root; 
}; 

沒有理由使用typedef:C++使類和結構自動成爲命名空間的一部分。

沒有理由使用lw_slist :: slist_cell,因爲slist_cell已經在當前命名空間中。

您得到錯誤dependent name is not a type的原因是在模板聲明中,C++無法確定lw_slist<T>::slist_cell是否應該是類型或變量。它假設一個名爲slist_cell的變量,並且您必須使用typename來表示否則。

+0

非常感謝。我最好深入瞭解一些教程。 – solotim 2010-10-29 05:48:57

7

這是一個錯誤,因爲那根本不是任何一種聲明。

編譯器需要知道,如果你想有一個classstructenumunion或別的東西。 typename不是在那裏使用的正確關鍵字。

可能尋找這樣的:

template<class T> 
struct lw_slist { 
}; 
+0

謝謝你的回答。我已經更新了這個問題,因爲如果我把'typename'改成'class',編譯器就會說'警告C4346:'lw_slist :: slist_cell':從屬名稱不是typename帶'typename'的\ n前綴來表示鍵入' – solotim 2010-10-29 05:35:17