与自定义模板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到大小的迭代工作,但它不是我喜欢实现此功能的方式。有没有其他的方法呢? 感谢
答
关于何时使用typename
关键字的经典案例。希望你有#include
-ed vector
和iterator
并且在某个范围内有一个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;
}
};
注:考虑通过在“矢量和数据”,也可能“矢量常量与数据”不“矢量数据”。前两个将传入一个向量的引用,后者将完成向量的复制。 –
2009-02-27 13:16:56
当然,这只是一个例子:) – DavidG 2009-03-02 11:26:24