포인터의 벡터를 사용하여 데이터 구조를 만들었으며 명확하지 않은 오류가 나타납니다. 내가 for 루프를 제거하는 시도하고 단순히 반복자를 선언하려고했습니다포인터 벡터에 대한 반복자가 예상됩니다.
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
여기에 헤더 파일
#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입니다 범위 오류를 가져옵니다. 내 검색 결과에 따르면 일반적으로 내부 클래스 끝에 세미콜론이 누락되거나 내부 클래스에 public이 없기 때문에 발생합니다. 그러나이 경우는 아닙니다. 포인터 벡터의 반복자에 특별한 선언이 필요합니까?
컨테이너에 대한 구성원 포인터는 거의 유용하지 않습니다. ' * v;'대신' v; '멤버를 만드십시오. –
aschepler
@aschepler 더 중요 : 오류가 발생하기 쉽습니다 ... 대부분의 사람들은 객체를 복사 할 수 있다는 것을 잊어 버립니다 ... (규칙 3) – leemes