`CompareValue' undeclared (first use this function)
-
hi,
noch ein problem mit Dev 5.0 und folgendem Code der mir obige Fehlermeldung liefert. Woran liegts?
//--------------------------------------------------------------------------- //! @brief Basisklasse fuer Vergleiche //--------------------------------------------------------------------------- template <typename T> class BaseCompare { protected: const T CompareValue; public: // Konstruktoren BaseCompare() : CompareValue() {} BaseCompare(const T &CmpValue) : CompareValue(CmpValue) {} }; //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //! @brief Vergleich "a kleiner b" //--------------------------------------------------------------------------- template <typename T> class Less : public BaseCompare<T> { public: // Konstruktoren Less() : BaseCompare<T>() {} Less(const T &CmpValue) : BaseCompare<T>(CmpValue) {} // Funktionsoperatoren bool operator () (const T &lhs) const { return (lhs < CompareValue); } bool operator () (const T &lhs, const T &rhs) const { return (lhs < rhs); } }; //---------------------------------------------------------------------------
-
typename
-
und wo?
-
bool operator () (const T &lhs) const { return (lhs < CompareValue); }basisklassen einer templateklasse, die von einem templateparameter abhängen, werden bei name lookup nicht durchsucht - hier muss also eine qualifizierte id hin:
bool operator () (const T &lhs) const { return (lhs < BaseCompare<T>::CompareValue); }
-
verstehe... heisst das also das der borland compiler diesen lookup macht oder einfach nur schlampt?
-
beides
-
camper schrieb:
bool operator () (const T &lhs) const { return (lhs < CompareValue); }basisklassen einer templateklasse, die von einem templateparameter abhängen, werden bei name lookup nicht durchsucht - hier muss also eine qualifizierte id hin:
bool operator () (const T &lhs) const { return (lhs < BaseCompare<T>::CompareValue); }Das ist nicht unbedingt notwendig, ein
this->CompareValuereicht schon vollkommen aus.
Sunday schrieb:
verstehe... heisst das also das der borland compiler diesen lookup macht oder einfach nur schlampt?
Er prüft einfach auch die Member in der Basisklasse, aber generell ist man gut beraten in Templates mit this-> zu arbeiten um irgendwelchen Problemen vorzubeugen.
BR
evilissimo