Announcement

Collapse
No announcement yet.

Warum ändert sich der Wert

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Warum ändert sich der Wert

    Guten Morgen,

    ich arbeite gerade an einem Programm, das einfach nur Punkte aus einer Datei lesen soll. Dazu habe ich eine Klasse Point2D, welche die einzelnen Punkte darstellen, und eine Klasse Outline, die ein Kontur enthält. Eine Kontur besteht aus einem Startpunkt und einer Menge von Punkten, die relativ zum Startpunkt liegen.

    Das Auslesen klappt. Ich kann auch alle Punkte setzen. Das einzige Problem ist der Startpunkt, auch ein Objekt der Klasse Point2D. Mein Programm setzt die Punkte richtig, aber wenige Anweisungen später sind die Werte wieder verschwunden. Ich kann mir nicht erklären, warum die Werte geändert werden.

    Hier seht ihr den relevanten Ausschnitt aus dem Programm:

    Code:
    	QByteArray  buffer; // A buffer.
    	QString bufferString; // A buffer for a string.
    	QString line; // The current line.
    	int x; // The x-coordinate of a point.
    	int y; // The y-coordinate of a point.
    	Outline outline; //A readed outline.
    	int charCounter = 0; // A counter for the characters in the line.
    
    	Point2D point; // A temporary point.
    	QFile file(filename);
    
    if ((file.open(QIODevice::ReadOnly)) != true) {
    		// Fehlermeldung. Try-catch.
    	} else {
    		while (file.atEnd() == false) {
    			// Read one line.
    			buffer = file.readLine();
    			line = buffer;
    			// If line contains the word "Polygon". 
    			if((charCounter = line.indexOf(Constants::POLYGONS_START_WORD, 0, Qt::CaseInsensitive)) >= 0) {
    				// Determine the x-coordinate of the startingpoint.
    				buffer = file.readLine();
    				line = buffer;
    				posEqualSign = line.indexOf("=", charCounter, Qt::CaseInsensitive);
    				bufferString = line.mid(posEqualSign + 1);
    				x = bufferString.toInt(false, 10);
    				// Determine the y-coordinate of the startingpoint.
    				buffer = file.readLine();
    				line = buffer;
    				posEqualSign = line.indexOf("=", charCounter, Qt::CaseInsensitive);
    				bufferString = line.mid(posEqualSign + 1);
    				y = bufferString.toInt(false, 10);
    				// Create the outline with the determined startingpoint.
    				Outline outline(x, y);
    			}
    		}
    	}
    	file.close();
    Die x- und y-Werte des Startpunktes sind richtig nach der Zeile Outline outline(x, y);, also am Ende der Schleife. Im nächsten Schleifendurchlauf sind sie wieder anders. Und zwar handelt es sich um Werte am obersten Rand von int.

    Ich habe die beiden Klassen Outline und Point3D getestet ohne Schleife und mit von Hand eingegebenen Werten. Da hat alles einwandfrei funktioniert.

    Hat jemand von euch eine Idee, wo der Fehler liegen könnte?

    Viele Grüße,

    Christopher

  • #2
    Ich habe den Fehler selbst gefunden. Die Idee kam mir auf dem Weg von der Mensa ins Büro

    Outline wird neu definiert. Wenn ich die Zeile folgendermaßen umändere, funktioniert es: outline = Outline(x, y);

    Comment

    Working...
    X