我必须编写一个具有const迭代器的容器模板类,但我必须使它实际上是一个stl容器的迭代器,我将其称为模板参数。
template <typename T, class StoreT = std::vector<T>>
class Store {
StoreT data;
public:
StoreT::const_iterator begin() {return data.begin()}
StoreT::const_iterator end() {return data.end()}
//other stuff
};
以这种方式调用:
Store<Foo>::const_iterator it1, it2;
for (it1 = t1.begin(), it2 = t2.begin(); it1 != t1.end(); ++it1,++it2)
cout<<*it1<<*it2; //just an example
我遇到很多错误,我无法弄清楚应该如何使其发挥作用。我需要在五个小时内上学。任何帮助将非常感激。 出了什么问题,我该怎么做才能让它发挥作用?
答案 0 :(得分:1)
您还没有提供完整的错误转储,而且您发布的代码显然是一段摘录,所以我要指出一些可能已经被处理过的事情。
确保您包含vector和iostream。
#include <vector>
#include <iostream>
在引用向量时,您明确提供了std命名空间,但在使用cout时却没有。你有一个“using namespace std;”在某个地方,这可能吗?如果没有,那么你需要
std::cout<<*it1<<*it2; //just an example
商店尚未定义const_iterator,因此您对it1和it2的定义无效。您需要在Store的公共部分中使用typedef或using语句:
public:
using const_iterator = typename StoreT::const_iterator;
此外,您缺少typename关键字和一些分号。
typename StoreT::const_iterator begin() {return data.begin();}
typename StoreT::const_iterator end() {return data.end();}
我可以假设t1和t2都在某处定义了吗?