我正在使用指針向量來創建一個數據結構,並發現我得到一個似乎不清楚的錯誤。下面是從頭文件預期指針向量錯誤的迭代器;
#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;
};
我正在克收到錯誤消息的基本代碼++版本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 v;'而不是'vector * v;'。 –
aschepler
@aschepler更重要的是:它很容易出錯...大多數人忘記了一個對象可以被複制......(Rule of Three) – leemes