繁体   English   中英

预期指针错误向量的迭代器;

[英]Iterator for vector of pointers error expected ;

我使用指针向量来创建数据结构,并发现我收到一个似乎不清楚的错误。 这是头文件的基本代码

#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循环,只是尝试声明迭代器并获取范围错误。 我的搜索表明,这通常归因于内部阶级结束时遗漏的分号或内部阶级缺乏公共存在,但事实并非如此。 指针向量的迭代器是否需要特殊声明?

你正在遭受C ++语言的一个有趣的怪癖。 您需要为iterator声明添加一个typenametypename vector<Node*>::iterator it )。 更多信息可以在问题中找到为什么我需要在g ++中使用typedef typename而不是VS?

您需要为vector<Node*>::iterator添加typedef,因为它是依赖于模板参数的dependent name

for(typename vector<Node*>::iterator it = v->begin(); it != v->end(); ++it) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM