none
有关模板类中嵌套一个类的问题 RRS feed

  • 问题

  • template<typename A,typename B>
    class Relation{
    friend ostream& operator<<(ostream& os,Relation<A,B>& r);
    private:
    string nom;
    string symbole;
    const set<A>* ptr_a;
    const set<B>* ptr_b;
    set< pair<A,B> > ensemble;
    public:
    Relation(const string& n,const string& s,const set<A>& source,const set<B>& destination);
    const string& get_nom()const{return nom;}
    const string& get_symbole()const{return symbole;}
    const set<A>* get_source()const{return ptr_a;}
    const set<B>* get_destination()const{return ptr_b;}
    void ajouter(const A& a,const B& b);
    bool est_en_relation(const A& a,const B& b);
    class iterateur{
    private:
    set< pair<A,B> >::iterator it;
    public:
    iterateur(set< pair<A,B> >::iterator& i):it(i){}
    void operator++(){it++;}
    void operator++(int){it++;}
    void operator--(){it--;}
    void operator--(int){it--;}
    pair<A,B>& operator*(){return *it;}
    bool operator!=(iterateur& i)const{return it!=i.it;}
    };
    iterateur begin()const{return iterateur(ensemble.begin());}
    iterateur end()const{return iterateur(ensemble.end());}
    };

    里面嵌套了一个模拟iterator的iterateur类,由于是第一次写模板类,有许多东西不是很懂......

    以下是错误代码:

    Error 5 error C2061: 语法错误: 标识符“iterator” g:\code\relation\relation\relation.h 30 1 Relation
    Error 2 error C2146: 语法错误: 缺少“;”(在标识符“it”的前面) g:\code\relation\relation\relation.h 28 1 Relation
    Error 3 error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int g:\code\relation\relation\relation.h 28 1 Relation
    Warning 1 warning C4346: “std::set<std::pair<_Ty1,_Ty2>>::iterator”: 依赖名称不是类型 g:\code\relation\relation\relation.h 28 1 Relation
    Warning 4 warning C4346: “std::set<std::pair<_Ty1,_Ty2>>::iterator”: 依赖名称不是类型 g:\code\relation\relation\relation.h 30 1 Relation

    麻烦各位指正,谢谢!

    2012年10月31日 11:30

答案

  • 啥编译器?把

    private:
    set< pair<A,B> >::iterator it;
    public:
    iterateur(set< pair<A,B> >::iterator& i):it(i){}

    改成

    private:
    typename set<pair<A, B>>::iterator it;
    public:
    iterateur(typename set<pair<A, B>>::iterator& i) : it(i) { }

    2012年11月1日 8:09

全部回复

  • 啥编译器?把

    private:
    set< pair<A,B> >::iterator it;
    public:
    iterateur(set< pair<A,B> >::iterator& i):it(i){}

    改成

    private:
    typename set<pair<A, B>>::iterator it;
    public:
    iterateur(typename set<pair<A, B>>::iterator& i) : it(i) { }

    2012年11月1日 8:09
  • 哦!原来如此,忘了加typename了......,感谢指正。
    2012年11月1日 11:08