QList<eigene_Klasse> sortieren -> Compilerfehler

Alles rund um die Programmierung mit Qt
Antworten
qmaddin
Beiträge: 31
Registriert: 15. Mai 2007 17:32

QList<eigene_Klasse> sortieren -> Compilerfehler

Beitrag von qmaddin »

Hallo!

Ich möchte eine QList<Number> sortieren lassen. Ich habe eine Klasse, die unter anderem einen QString enthält.

Code: Alles auswählen

class Number
{
public:
	Number(QString &);
	const QString getNumber() {return myNumber;}
	
	const bool operator==(Number);
	const bool operator<(Number);

private:
	QString myNumber;
};

Code: Alles auswählen

#include "number.h"

Number::Number(QString &number):
	myNumber(number)
{}

const bool Number::operator==(Number rhs)
{
	return (getNumber() == rhs.getNumber());
}

const bool Number::operator<(Number rhs)
{
	return (getNumberI() < rhs.getNumberI());
}
Das kompiliert soweit. Rufe ich nun aber in einer anderen Klasse für eine QList<Number> result; folgendes auf qSort(result.begin(), result.end()); , dann kompiliert es nicht mehr:

Code: Alles auswählen

/usr/include/qt4/QtCore/qalgorithms.h: In member function »bool qLess<T>::operator()(const T&, const T&) const [with T =Number]«:
/usr/include/qt4/QtCore/qalgorithms.h:357:   instantiated from »void QAlgorithmsPrivate::qSortHelper(RandomAccessIterator, RandomAccessIterator, const T&, LessThan) [with RandomAccessIterator = QList<Number>::iterator, T = Number, LessThan = qLess<Number>]«
/usr/include/qt4/QtCore/qalgorithms.h:401:   instantiated from »void QAlgorithmsPrivate::qSortHelper(RandomAccessIterator, RandomAccessIterator, const T&) [with RandomAccessIterator = QList<Number>::iterator, T = Number]«
/usr/include/qt4/QtCore/qalgorithms.h:175:   instantiated from »void qSort(RandomAccessIterator, RandomAccessIterator) [with RandomAccessIterator = QList<Number>::iterator]«
fileaccess.cpp:109:   instantiated from here
/usr/include/qt4/QtCore/qalgorithms.h:156: Fehler: Die Übergabe von »const Number« als »this«-Argument von »const bool Number::operator<(Number)« streicht Qualifizierer
make: *** [otherclass.o] Fehler 1
Der Fehler deutet vermutlich auf eine const-Verletzung hin. Leider sehe ich keine.

Mir ist es ja egal, wie die QList<Number> sortiert wird, aber sie soll am Ende einfach nur sortiert sein! :-)

Danke schonmal!
QMaddin
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Code: Alles auswählen

   Number(QString &);
   const QString getNumber() {return myNumber;}

   const bool operator==(Number);
   const bool operator<(Number);
Das ist irgendwie sinnlos - ein const bool zurückzugeben. Wolltest Du ggf.

Code: Alles auswählen

   Number(const QString &);
   QString getNumber() const{return myNumber;}
   bool operator==(Number) const;
   bool operator<(Number) const;
schreiben?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
qmaddin
Beiträge: 31
Registriert: 15. Mai 2007 17:32

Beitrag von qmaddin »

Ok, mit deinen Änderungen (und denm zugehörigen Änderungen der Memberfunktionen) funktionierts.
Kannst du mir sagen, was der Unterschied zwischen dem const vorne und hinten ist, bz.w auf eine taugliche Doku verweisen?

Danke,
QMaddin
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ist eigentlich C++ Basics... naja :)

das const bezieht sich immer auf das 'element' bei dem es steht. vorn ist der Rückgabewert, also bezieht es sich auf den Rückgabewert. bis hinten bezieht es sich auf die komplette Funktion.

Mir ist gerade aufgefallen, dass

Code: Alles auswählen

bool operator==(const Number&) const;
bool operator<(const Number&) const; 
Noch besser wäre.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
NoobSaibot
Beiträge: 99
Registriert: 27. Januar 2005 15:55

Beitrag von NoobSaibot »

ein const methode sagt aus, daß es interne daten dieser instanz nicht verändert.
qmaddin
Beiträge: 31
Registriert: 15. Mai 2007 17:32

Beitrag von qmaddin »

Ich habe zwar ein gewisses theoretisches Wissen über C++, aber einfach zu wenig Programmierpraxis... :?

Ich habe gerade deinen Verbesserungsvorschlag noch mit eingebaut.
Lass mich raten: Es wird ein Objekt übergeben, das nicht verändert werden darf und das nicht kopiert wird, sondern es wird eine Referenz übergeben...

Martin
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

richtig
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten