Seite 1 von 1

operator !=-Demenz?

Verfasst: Fr Jul 27, 2012 2:51 pm
von Xin
Ich habe bei mir mal in den Quellen einiges umgestellt, aber an einer Ecke hakt es nun doch ganz gut...

Er meckert in Zeile 173 an, dass er "area != iconArea" nicht vergleichen kann. area und auch iconArea sind vom Typ XSD::Unit::Area.

Code: Alles auswählen

g++ | dimvalue (de/xsd/block/element).....
../../../../de/xsd/block/element/dimvalue.cpp: In Funktion »bool operator!=(const XSD::Unit::Area&, const XSD::Unit::Area&)«:
../../../../de/xsd/block/element/dimvalue.cpp:10:6: Fehler: Redefinition von »bool operator!=(const XSD::Unit::Area&, const XSD::Unit::Area&)«
../../../../de/xsd/unit/area.h:140:13: Fehler: »bool operator!=(const XSD::Unit::Area&, const XSD::Unit::Area&)« wurde vorher hier definiert
../../../../de/xsd/block/element/dimvalue.cpp: In Elementfunktion »virtual void XSD::Block::Element::DimValue::Refresh(unsigned int)«:
../../../../de/xsd/block/element/dimvalue.cpp:173:15: Fehler: keine Übereinstimmung für »operator!=« in »area != iconArea«
../../../../de/xsd/block/element/dimvalue.cpp:173:15: Anmerkung: Kandidat ist:
../../../../de/xsd/unit/course.h:96:13: Anmerkung: bool XSD::Unit::operator!=(XSD::Unit::Course, XSD::Unit::Course)
../../../../de/xsd/unit/course.h:96:13: Anmerkung:   keine bekannte Umwandlung für Argument 1 von »XSD::Unit::Area« nach »XSD::Unit::Course«
Allerdings ist in area.h der Operator definiert und zwar im globalen Namensraum:

Code: Alles auswählen

inline bool operator != ( XSD::Unit::Area const & lhs, XSD::Unit::Area const & rhs )
{ return lhs.Width != rhs.Width || lhs.Height != rhs.Height; }
Der Code wird auch eingelesen. Das gilt spätestens seitdem ich die Definition nochmal in die meckernde Datei geschrieben habe. Ihr seht ja oben, dass der operator != für XSD::Unit::Area doppelt definiert ist. Warum findet er dann den passenden Operator nicht? Area ist von nichts abgeleitet und hat mit XSD::Unit::Course nichts zu tun.

Re: operator !=-Demenz?

Verfasst: Fr Jul 27, 2012 2:55 pm
von Xin
Narf... kaum hat man die Frage gestellt, sieht man die Lösung...


Operator != ( XSD::Unit::Course const & lhs, XSD::Unit::Course const & rhs ) war im Namensraum XSD::Unit definiert und nicht global.
Also fand er bei XSD::Unit::Area erstmal operator != für Course und suchte dann nicht mehr weiter...