Frage

int a=0;
while (a<2)
{
    //infos.stops is point to one array, called abc[10]

    output = output + QString::fromStdString(*infos.stops)+ "." ;

    infos.stops++;
    a++;
}
ui->showMsg->setText(output);

Das Problem ist, dass infos.stops angezeigt wurde, aber einige lustige Zeichen wie folgt aussehen:

Bildbeschreibung hier eingeben

Ich habe meinen gesamten Quellcode hochgeladen, der in QT Designer erstellt wurde http://uploading.com/files/eaddfaf8/bus.zip/ Die Problemzeile befindet sich in der Manager.cpp-Zeile 133.

War es hilfreich?

Lösung

Versuchen Sie es mit output = output + QString::fromStdString(*(infos.stops))+ "." ;

Andere Tipps

Ich glaube, ich habe es gelöst, nachdem ich Ihre Anwendung ein wenig getestet habe.Das folgende Codesegment sollte dies tun:

          output = output+ "Stops travelled: ";
          for(int a = 0; a < infos._numstops; ++a)
          {
              if(a)
                  output += ", ";
              output = output + QString::fromStdString(infos.stops[a]);
          }
          output = output + "<br>";

Beachten Sie, dass Sie den infos._numstops des Mitglieds verfügbar haben und ihn verwenden sollten.Der if(a) ist ein guter Trick, wenn Sie eine durch Kommas getrennte Liste ausgeben möchten.

(Ich habe Ihre Anwendung ausgeführt und festgestellt, dass die info-Struktur nicht den Stopp enthält, an dem Sie Ihren Pfad beginnen, sondern den, an dem er endet. Sie sollten den Startstopp in die Ausgabe aufnehmen oder den Zielstopp ausschließenBeachten Sie außerdem, dass der +=-Operator wie im if-body eine übliche Methode zum Anhängen von Zeichenfolgen ist.)

In manager.cpp: 103 rufen Sie DE1.cost (X, Y) auf.Diese Methode erstellt ein std :: string-Array (übergeben) auf dem Stapel (datzz.cpp: 432) und bei datzz.cpp: 502

c.stops = passed;

, das einen Zeiger auf einen auf dem Stapel zugewiesenen Speicherblock in der Stopps-Variablen Ihrer DatzEzy :: info-Instanz speichert. c.Wenn die Methodenkosten (Zeichenfolge, Zeichenfolge) zurückgegeben werden, wird der für die Übergabe zugewiesene Speicher freigegeben und Ihre Ausgabe ist Müll.Speichern Sie niemals Zeiger, um zugewiesene Objekte zu stapeln.

Übrigens sollten Sie beim Übergeben von (schreibgeschützten) Zeichenfolgen in Funktionsaufrufen die Verwendung von const-Referenzen in Betracht ziehen, um teures Kopieren zu vermeiden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top