与自定义模板STL迭代器

问题描述:

我有以下模板法,与自定义模板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

关于何时使用typename关键字的经典案例。希望你有#include -ed vectoriterator并且在某个范围内有一个using namespace std;。使用:

typename vector<T>::iterator it; 

查找相关名称。开始here

尝试:

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

才是情况下,它是一个缺少using声明?

+0

如果他错过了使用语句,他也会在函数签名中得到一个错误。 – 2009-02-27 12:55:45

我认为你缺少一个typename

#include <vector> 
using namespace std; 

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