On Jun 8, 8:27*am, Markus Dehmann <markus.dehm...@gmail.com> wrote:
> I want to derive from std::set, like shown below. But when I try to
> declare an iterator over the contained elements I get an error, see
> the twp uncommented lines:
>
> #include <set>
> template<class T>
> class MySet : public std::set<T>{
> public:
> * MySet() : std::set<T>() {}
> * void foo(){
> * * // const_iterator it; // error: `const_iterator' undeclared (first
> use this
> function)
> * * // std::set<T>::const_iterator it; // error: expected `;' before
> "it"
> * }
>
> };
>
> I thought const_iterator should be a member of this class (since I am
> deriving from std::set). What am I doing wrong?
Not getting into why you want to derive from a standard container,
here's how you can make it work:
#include <set>
template<class T>
class MySet : public std::set<T>{
public:
MySet() : std::set<T>() {}
void foo(){
//either create typedefs to use iterator/const_iterator directly
typedef typename std::set<T>::const_iterator const_iterator;
typedef typename std::set<T>::iterator iterator;
const_iterator it;
//or use fully qualified names but will need typename
typename std::set<T>::const_iterator it2;
}
};
You may find these FAQs useful -
http://www.comeaucomputing.com/techtalk/templates/