Используя QString, вы получите странные символы в выводе - PullRequest
0 голосов
/ 30 января 2011
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);

Проблема в том, что infos.stops показывал, но некоторые забавные символы выглядят так:

enter image description here

Я загрузил весь свой исходный код, разработанный в QT Designer http://uploading.com/files/eaddfaf8/bus.zip/ Строка проблемы находится в строке manager.cpp 133.

Ответы [ 3 ]

3 голосов
/ 30 января 2011

Попробуйте использовать output = output + QString::fromStdString(*(infos.stops))+ "." ;

1 голос
/ 01 февраля 2011

Я думаю, что решил это после небольшого тестирования вашего приложения. Следующий сегмент кода должен сделать это:

          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>";

Обратите внимание, что у вас есть член infos._numstops, и вы должны его использовать. if(a) - хороший прием, если вы хотите вывести список через запятую.

(Я запустил ваше приложение и заметил, что структура info включает в себя не остановку, с которой вы начинаете свой путь, а ту, где он заканчивается. Вы должны включить начальную остановку в вывод или исключить остановка цели. Также обратите внимание, что оператор +=, такой как if-body, является обычным способом добавления строк.)

0 голосов
/ 01 февраля 2011

В manager.cpp: 103 вы звоните DE1.cost (X, Y).Этот метод создает массив std :: string (передается) в стеке (datzz.cpp: 432), а в datzz.cpp: 502 вы делаете

c.stops = passed;

, в котором хранится указательк блоку памяти, выделенному в стеке в переменной остановок вашего экземпляра DatzEzy :: info c.Когда метод value (строка, строка) возвращается, память, выделенная для передачи, освобождается, и ваш вывод будет мусором.Никогда не храните указатели для размещения выделенных объектов.

Кстати, вы должны рассмотреть использование константных ссылок при передаче (только для чтения) строк в вызовах функций, что позволяет избежать дорогостоящего копирования.

...