2009-02-27 198 views
4

我有以下模板法,與自定義模板STL迭代器

template <class T> 
void Class::setData(vector<T> data) 
{  
    vector<T>::iterator it; 
} 

,我得到以下編譯錯誤(的XCode/GCC)

error: expected `;' before 'it'

我發現別人有類似問題here (read down to see it's the same even though it starts out with a different issue)但它們似乎已通過更新Visual Studio解決。這讓我猜測這是一個編譯器問題,它應該編譯,是否正確?通過索引從0到大小的迭代工作,但它不是我喜歡實現此功能的方式。有沒有其他的方法呢? 感謝

+0

注:考慮通過在「矢量和數據」,也可能「矢量常量與數據」不「矢量數據」。前兩個將傳入一個向量的引用,後者將完成向量的複製。 – 2009-02-27 13:16:56

+0

當然,這只是一個例子:) – DavidG 2009-03-02 11:26:24

回答

10

關於何時使用typename關鍵字的經典案例。希望你有#include -ed vectoriterator並且在某個範圍內有一個using namespace std;。使用:

typename vector<T>::iterator it; 

查找相關名稱。開始here

0

嘗試:

template <class T> 
void Class::setData(std::vector<T> data) 
{  
    std::vector<T>::iterator it; 
} 

纔是情況下,它是一個缺少using聲明?

+0

如果他錯過了使用語句,他也會在函數簽名中得到一個錯誤。 – 2009-02-27 12:55:45

1

我認爲你缺少一個typename

#include <vector> 
using namespace std; 

class Class{ 
public: 
    template <class T> 
    void setData(vector<T> data) { 
     typename vector<T>::iterator it; 
    } 
};