我正在制作一个程序,我Set从一个内置的STL容器类公开继承我的类set.我必须使用迭代器类型,同时为我自己的Set类创建一些其他专用函数,如stlset类中所定义.
现在我的问题是:在我的成员函数中声明迭代器类型变量的语法是什么?我已经试了:
template<typename T>
class Set : public set<T> {
public:
bool func()
{
iterator it,it2;
}
};
Run Code Online (Sandbox Code Playgroud)
但编译器无法识别迭代器类型.请告诉我使用stl set类中的迭代器类型的语法.
编译器抱怨,因为它不知道它iterator实际上是一个成员set<T>.set<T>是什么称为依赖类型,因为它取决于类型参数T.简而言之,编译器在解析类型时不会查看依赖名称.
此FAQ条目与此问题相关.此外,请务必阅读此Stack Overflow问题的答案.要修复它,请使用typename.
template<typename T>
class Set : public set<T> {
public:
bool func()
{
typename set<T>::iterator it;
typename set<T>::iterator it2;
}
};
Run Code Online (Sandbox Code Playgroud)
但实际上,你应该在这种情况下使用合成而不是继承,如下所示:
template<typename T>
class Set
{
public:
bool func()
{
typename set<T>::iterator it;
typename set<T>::iterator it2;
}
private:
std::set<T> set;
};
Run Code Online (Sandbox Code Playgroud)