Het probleem:
Ik heb dus een template class List die geinherited is van std::list. Deze afgeleide template class maakt gebruik van de const_iterator gedefineerd in de base class list.
deel van List:
Onder Linux/GCC werkt dit prima, maar zodra ik de HPUX compiler aCC gebruik (die volstrekt ANSI compatible zou moeten zijn) komt de compiler met de volgende error message:
Nu vraag ik mij af, doe ik nu iets dat niet volgens de standaard kan en GCC is niet zo strikt, of kan het een bug in de STL of compiler zijn van HPUX.
Ik heb dus een template class List die geinherited is van std::list. Deze afgeleide template class maakt gebruik van de const_iterator gedefineerd in de base class list.
deel van List:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| template <class T>
class List : public list<T> {
public:
List() : list<T>() {}
List( const Vector<T>& vec )
{ for (int i=0; i<vec.size(); i++) push_back( vec[i] ); }
List<T>& operator=( const List<T> &rhs ) {
if (this != &rhs ) {
erase( this->begin(), this->end() );
for (typename list<T>::const_iterator i=rhs.begin(); i!=rhs.end(); i++)
push_back( *i );
}
return *this;
}
... |
Onder Linux/GCC werkt dit prima, maar zodra ik de HPUX compiler aCC gebruik (die volstrekt ANSI compatible zou moeten zijn) komt de compiler met de volgende error message:
code:
1
2
3
4
5
| Error 619: "Polygon3.h", line 65 # The definition of template List<P3<double> > contains typename
qualification 'List<T>::const_iterator', yet generation of specialization class List<P3<double> >
implies that 'List<T>' is 'class List<P3<double> >', which does not contain a type named
'const_iterator'.
Polygon3( const List<Point3>& vertices ) |
Nu vraag ik mij af, doe ik nu iets dat niet volgens de standaard kan en GCC is niet zo strikt, of kan het een bug in de STL of compiler zijn van HPUX.