【发布时间】:2012-12-03 13:08:48
【问题描述】:
我正在使用一个指针向量来创建一个数据结构,并发现我收到了一个似乎不清楚的错误。这是头文件中的基本代码
#include <vector>
using namespace std;
template <typename Key, typename Value>
class ST{
class STNode{
public:
STNode(Key k, Value v) : key(k), value(v){}
~STNode(){}
Key key;
Value value;
};
typedef typename ST<Key, Value>::STNode Node;
public:
ST():v(NULL) {v = new vector<Node*>();}
~ST(){
// vector contains allocated objects
for(vector<Node*>::iterator it = v->begin(); it != v->end(); ++it)
delete (*it);
delete v;
}
private:
vector<Node*>* v;
};
我在 g++ 4.6.6 版上收到的错误消息是
ST.h: In destructor 'ST<Key, Value>::~ST()':
ST.h:20: error: expected ';' before 'it'
ST.h:20: error 'it' was not declared in this scope
我已尝试删除 for 循环,只是尝试声明迭代器并获取范围错误。我的搜索表明,这通常归因于内部类末尾缺少分号或内部类中缺少公共存在,但事实并非如此。指针向量的迭代器是否需要特殊声明?
【问题讨论】:
-
指向容器的成员指针很少有用。考虑将成员设为
vector<Node*> v;而不是vector<Node*>* v;。 -
@aschepler 更重要的是:它容易出错......大多数人忘记了可以复制对象......(三法则)
标签: c++ templates stl vector iterator