CList und Find()



  • Hallo zusammen!

    Hab ein kleines Problem und komme einfach nicht weiter:

    Ich hab eine selbst definierte Klasse CVUDataChannel, deren Header folgendemaßen aussieht:

    #pragma once
    
    class CVUDataChannel
    	{
    	// Member-Variablen
    	public:
    		double m_dTime;
    		BYTE m_ucSpeed;
    		float m_fAcc;
    		float m_fOdoVal;
    		BYTE m_ucInputState;
    		BYTE m_ucHighResTriggerType;
    
    	// Methoden
    	public:
    		CVUDataChannel();
    		~CVUDataChannel();
    		//CVUDataChannel &CVUDataChannel::operator= (CVUDataChannelData &data);
    		bool CVUDataChannel::operator==(CVUDataChannel& data);
    	};
    

    Nun verwende ich diese Klasse in einer CList:

    CList<CVUDataChannel, CVUDataChannel&> m_dataChannelList;
    

    Funktioniert soweit auch. Nur sobald ich die Find-Methode der Liste verwenden möchte bekomme ich folgenden Compiler-Error:

    eror C2678: binary '==' : no operator found which takes a left-hand operand of type 'const CVUDataChannel' (or there is no acceptable conversion)
    

    Der Code des ==-Operators in CVUDataChannel sieht folgendermaßen aus:

    bool CVUDataChannel::operator==(CVUDataChannel& data)
    	{
    	if (this == &data)
    		return true;
    
    	if (m_dTime == data.m_dTime)
    		return true;
    	else
    		return false;
    	}
    

    Warum funktioniert das ganze jetzt nicht? Weiß leider wirklich keinen Rat mehr und bräuchte eure Hilfe!

    danke, mfg


  • Administrator

    Lies den Fehler nochmals genau und dann weisst du es ^^

    bool CVUDataChannel::operator== (const CVUDataChannel& data)
    // ...
    

    Da fehlt einfach nur ein const in den Klammern, genau wie es eben auch in der Fehlermeldung gesagt wird 😉

    Aja und übrigens, das folgende lässt sich abkürzen:

    CList<CVUDataChannel, CVUDataChannel&> m_dataChannelList;
    // Abgekürzt:
    CList<CVUDataChannel> m_DataChannelList;
    // Wieso? Weil die Templates von CList so definiert sind:
    CList<class TYPE, const class ARG_TYPE = TYPE&>
    

    Grüssli



  • Hm, eigentlich hab ich schon alles durchprobiert, was irgendwie möglich ist (also auch mit const, was bisher nicht funktioniert hat...

    Habs gerade nochmal mit const versucht und siehe da -> Es funktionert!

    Weiß zwar nicht, was ich vorher anders gemacht habe, aber nun klappts ja!

    Danke, mfg



  • Hätte da noch eine Frage:

    Ich kann ja als Template-Typ auch eine Struktur verwenden, was ich bisher auch so praktiziert habe (also CVUDataChannel nicht als Klasse sondern struct).

    Leider bin ich da beim Find eben auf den Fehler gestoßen, dass ja kein Vergleichsoperator überladen ist.
    Kann man das mit einer struct auch irgendwie hinbekommen oder bleibt mir nichts anderes als der die Klasse übrig?

    danke, mfg


Anmelden zum Antworten