Das ist mir jetzt echt peinlich das hier zu posten... Wahrscheinlich bin ich nur schon blind, weil heute ein anstrengender Tag war... Oder ist hier mal wieder was das mir bei C/C++ nie bewusst war?!
In beiden Code-Beispielen hat "actual size" eine Höhe von 100. Der Unterschied ist hoffentlich nur, dass (1) über eine temporäre Kopie geht.
double y = 0.0;
y += pChild->getActualSize().height();
Das Ergebnis ist unerwarteterweise y=-9.2559631349317831e+061
EDIT: Klammen setzen habe ich schon probiert. Threads fummeln auch nicht dazwischen, weil keine sekundären aktiv sind. Solution cleanen habe ich auch schon mehrfach getan.
Das sieht alles sehr nach gleicher Funktionalität aus. Entweder hast du einen Compilerfehler gefunden oder aber bei dem 2.Fall ist die Höhe noch nicht initialisiert. Der Return-Wert -9.2559631349317831e+061 deutet darauf hin. Werden denn die beiden Code-Schnipsel an der selben Stelle ausgeführt ? Schau dir mal im Debugger den Assemblercode an und die Register.
Edit: Es könnte auch ein Fehler beim Kopieren des size2D-Objects sein, also der Klasse. Ich nehme an das du diese Klasse selbst geschrieben hast.
Zuletzt geändert von gdsWizard am 13.01.2014, 19:02, insgesamt 2-mal geändert.
gdsWizard hat geschrieben:Das sieht alles sehr nach gleicher Funktionalität aus. Entweder hast du einen Compilerfehler gefunden oder aber bei dem 2.Fall ist die Höhe noch nicht initialisiert.
Der 1. und der 2. Fall sind an der gleichen Stelle. Den 1. Fall habe ich nur implementiert weil ich den 2. Fall nicht verstanden habe.
Irgendwie kann ich mir nicht vorstellen, dass das ein Compiler-Fehler sein soll. Ich suche mal weiter... Womöglich muss ich mal den Assembler-Code ansehen, und beten dass ich den verstehe.
gdsWizard hat geschrieben:Es könnte auch ein Fehler beim Kopieren des size2D-Objects sein, also der Klasse. Ich nehme an das du diese Klasse selbst geschrieben hast.
Jepp. Hier ist der Quelltext. Dazu gibt's noch ein using Size2d = TSize2<double>;. Die Klasse macht aber an tausend anderen Stellen keine Problem.
Ok, also in einer separaten Konsolenanwendung funktioniert es. Und überall anders im Projekt habe ich damit auch keine Problem. Der Fehler muss irgendwie im Kontext der folgenden Methode auftreten, die ich leider nicht mal eben zum posten versimplifizieren kann. Aber vielleicht sieht ja doch jemand was. Fall 1 und 2 sind in dem Präprozessor-Teil im else Zweig.
In pChild->getActualSize() ist pChild vom Typ View *. Die Klasse View enthält eine Member-Variable Rectangle2d m_actualRect;. Die Method getActualSize() sieht so aus:
gdsWizard hat geschrieben:Im folgendem Code solltest du das Referenzzeichen '&' entfernen.
Das da eine const-Referenz steht ist schon ok, da Rectangle2d::size() wiederum eine const-Referenz zurückgibt. Oder besser gesagt, sie hätte das tun sollen, aber ich hatte in Rectangle2d::size() einen Bug, den du mir gerade geholfen hast zu finden. Vielen lieben Dank!!! :-)
Und damit du auch siehst, wobei du geholfen hast... (das StackLayout rechts oben mit den grünen Zellen):
Schön das ich dir helfen konnte. Ich benutze nur selten das Schlüsselwort const. Deshalb hatte ich es entfernt, macht ja hauptsächlich bei Referenzen Sinn.
gdsWizard hat geschrieben:Schön das ich dir helfen konnte. Ich benutze nur selten das Schlüsselwort const. Deshalb hatte ich es entfernt, macht ja hauptsächlich bei Referenzen Sinn.
Vielleicht solltest du dich doch mal etwas tiefgehender mit const beschäftigen. const correctness ist in C++ von fundamentaler Bedeutung... ;)
Vielleicht solltest du dich doch mal etwas tiefgehender mit const beschäftigen. const correctness ist in C++ von fundamentaler Bedeutung... ;)
Als ich angefangen habe in C++ zu programmieren hatte ich mir auch const angesehen. Ist ein const parameter einmal const müsste man ihn extra casten um ihn ändern zu können. Ich habe eben nochmal gegoogelt. Im obigen Beispiel wäre es natürlich richtig gewesen const bei zu belassen, zumal es sich hier um die const deklaration für this handelt. Ich gebe bei Return-Werten fast immer (außer bei meinen array templates) normale Objekte zurück, also keine Referenzen. Wenn nötig gebe ich Zeiger zurück. Aber nachdem ich jetzt wieder mein Wissen diesbezüglich erneuert habe werde ich in Zukunft wieder const benutzen. Man lernt eben nie aus. :)
Eine andere Frage: warum funktioniert der Benutzername in quote bei mir nicht ? Kann mir da jemand helfen ? Ich hatte folgendes probiert:
Niki hat geschrieben:Wenn du den Benutzernamen in Gänsefüßchen packst, dann funktioniert es.
Danke für den wertvollen Hinweis. Ich dachte ich hätte das schon probiert. Scheinbar doch nicht. Jetzt bin ich froh das der Quote-Benutzername funktioniert. Vielen Dank.