2010-08-26 126 views
3

我具有類似於在頭文件以下代碼:C++在模板化的類模板的成員變量具有不完整的類型

template<class A> 
class List { 
    private: 
    QVector<A> _list; 
}; 

其中QVector是標準QT容器。

當我試圖讓List類型的變量,像這樣在另一頭文件中的一個成員變量:

class Model { 
    private: 
    List<int *> the_list; 
}; 

我收到以下錯誤:

In instantiation of 'List<int *>': 
instantiated from here 
error: 'List<A>::_list' has incomplete type 

基本上,我想使用內部QVector存儲數據項目的模板化自定義列表。

我認爲我的語法有點不合適,所以任何幫助將不勝感激。

+0

您是否包含第二個標頭?值得運行的只是預處理階段,例如「gcc -E」檢查事物是否如他們所看到的那樣。 – 2010-08-26 02:55:42

回答

5

在申報class List { }之前,請確保您有#include d QVector的頭文件。如果你忽略它,QVector是一個未定義的類型,但是因爲List是一個模板類,所以編譯器在第一次實例化List之前不會省略錯誤消息。

#include <QVector> 

template<class A> 
class List { 
    private: 
    QVector<A> _list; 
}; 
+0

謝謝!這是問題所在。如果我在缺少的#include上花了幾個小時,我必須需要更多的咖啡因:)。 – Aaron 2010-08-26 02:59:17

+0

請注意,許多編譯器會爲此打印一個錯誤,即使在此聲明和實例化之間定義了QVector,它仍然是一個錯誤。 – Potatoswatter 2010-08-26 03:01:09

+0

@Patatoswatter,看起來像'QVector'被* forward聲明瞭*,所以如果沒有'List '的實例化,編譯器確實不允許錯誤輸出。 – 2010-08-27 12:44:55

相關問題