default template arguments Problem



  • Ich hab eine Klasse so definiert (Volkards Tutorial)

    template<class T, class C = DefaultComparator<T> >
    class SortedArray
    {
      .
      .
    public:
      int Find(const T &toFind);
      .
      .
    };
    

    Wie definiere ich die Funktion, wenn ich dies NICHT im Klassenrumpf selbst tun möchte? Ich habs schon auf mehrere Arten versucht, z.B:

    template<class T, class C = DefaultComparator<T> >
    int SortedArray<T, C>::Find(const T &toFind)
    { bla }
    
    template<class T, class C = DefaultComparator<T> >
    int SortedArray<T, C<T> >::Find(const T &toFind)
    { bla}
    

    und so weiter .... Wie muss ich das hier in den < > schreiben, an genau dieser Stelle:

    int SortedArray<T, ????? >::Find(const T &toFind)
    

    Da will nämlich nichts klappen 😞

    default template arguments may not be used in function templates
    'C' is not a template
    

    Das mit dem "'C' is not a template" kam vorher nicht, dafür massiv andere Fehlermeldungen ...
    Bitte helft mir, in dem Beispielprogramm wurden alle Funktionen immer nur inline definiert -.-



  • Defaultparameter mußt du immer nur EINMAL definieren, danach findet der Compiler sie von alleine wieder:

    template<typename T, typename C = Compare<T> >
    class SortedArray
    {
    public:
      int Find(const T&) const;
      ...
    };
    
    template<typename T,typename C>//hier kein Defaultwert
    inline int SortedArray<T,C>::Find(const T& val) const
    {
      ...
      return 0;
    }
    


  • Ahhh daran lags, super, danke!!


Anmelden zum Antworten