我正在制作一个程序,在该程序中我从内置STL容器类Set公开继承我的set类。我必须使用迭代器类型,同时为自己的Set类制作一些其他专用功能,如stl set类中所定义。

现在我的问题是:在成员函数中声明迭代器类型的变量的语法是什么?我已经试了:

  template<typename T>
  class Set : public set<T> {
         public:
         bool func()
         {
            iterator it,it2;
         }
   };

但是编译器无法识别迭代器类型。请告诉我使用STL set类中的迭代器类型的语法。

最佳答案

编译器抱怨是因为它不知道iterator实际上是set<T>的成员。 set<T>称为依赖类型,因为它取决于类型参数T。简而言之,编译器在解析类型时不会在内部依赖名称中查找。

This FAQ entry is relevant to this question。另外,请务必通读the answers to this Stack Overflow question。要修复它,请使用typename

template<typename T>
class Set : public set<T> {
public:
    bool func()
    {
        typename set<T>::iterator it;
        typename set<T>::iterator it2;
    }
};

但实际上,在这种情况下,您应该是using composition instead of inheritnace,如下所示:
template<typename T>
class Set
{
public:
    bool func()
    {
        typename set<T>::iterator it;
        typename set<T>::iterator it2;
    }
private:
    std::set<T> set;
};

关于c++ - 从STL容器类公开继承时,如何使用迭代器类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9147053/

10-13 08:34