Gleiche Operatoren im selben Namespace



  • Hi,

    ich habe zwei Templateklassen. Für beide habe ich einen [] operator definiert. Beide Klassen sind jedoch im selben Namespace und da kommt das Problem. MSVC++ Express kompiliert mir das nicht und ich erhalte den Fehler C2666 (Overloads have similar conversion). Ich habe schon in der MSDN nachgeschaut, aber irgendwie ist die nicht wirklich hilfreich.

    Weiß jemand wie ich das fixen könnte?
    Danke schonmal für Tipps!

    Hier mal ein Auszug aus dem Code:

    Atest.h

    namespace test
    {
    
      template <class T, unsigned N>
      class Atest{
    
    protected:
        T vec_[N];
      public:
    
        T& operator[](const int i) { return vec_[i]; }
        const T& operator[](const int i) const { return vec_[i]; }
       };
    }
    

    Stest.h

    #include "Atest.h"
    
    namespace test
    {
    	template<class T, unsigned N> class Stest
    	{
      protected:
    	  Atest<T, N> data_;
    
      public:
    	  T operator[](unsigned i) const		{ return data_[i];				}
    	  T& operator[](unsigned i)				{ return data_[i];				}
            };
    }
    


  • Da deine Operatoren nicht global rumliegen sondern als Klassenmember fungieren dürfte es da eigentlich keine Probleme geben.

    Ich schätze du hast bei der Implementierung ganz einfach "Klasse::" vergessen.

    /Edit Edit Edit: Schau dir die Signatur deiner Operatoren nochmal genau an.

    MfG SideWinder



  • SideWinder schrieb:

    Da deine Operatoren nicht global rumliegen sondern als Klassenmember fungieren dürfte es da eigentlich keine Probleme geben.

    Ich schätze du hast bei der Implementierung ganz einfach "Klasse::" vergessen.

    /Edit Edit Edit: Schau dir die Signatur deiner Operatoren nochmal genau an.

    MfG SideWinder

    Hi danke erstmal,

    was meinst du mit Signatur? Bin noch nicht all zu lange dabei und etwas langsam 🙂



  • Ah, ich habs jetzt. Ich hab den Operator explizit aufgerufen und jetzt funktioniert es!

    return data_.operator [](i);
    

    😃

    Aber was meintest du mit Signatur?

    Danke trotzdem!!



  • Signatur ist z.B. der name eine Funktion und die Anzahl der Parameter einer Funktion. Weil anhand dessen kann man eine Funktion identifizieren... ist wie eine Signierung.



  • Artchi schrieb:

    Signatur ist z.B. der name eine Funktion und die Anzahl der Parameter einer Funktion. Weil anhand dessen kann man eine Funktion identifizieren... ist wie eine Signierung.

    Ah! Danke Brüderchen 🙂


Anmelden zum Antworten