2011-01-30 3 views
-2
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 сделал шоу, но некоторые забавные персонажи появляются как:Использование QString получить странные символы в выходных данных

enter image description here

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

+0

Можете ли вы показать больше информации о infos и infos.stops? –

+0

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

+0

информация находится в файле datzz.cpp – bluedream

ответ

3

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

+0

Привет, ошибки отображаются как «нет соответствия для« operator * »в '* infos' – bluedream

+0

i am buidiling using qt designer, это ошибка запуска, похоже, не может скомпилировать – bluedream

+0

Oh Я ошибался ранее. Попробуйте новый. –

0

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

c.stops = passed;

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

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

1

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

  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 availlable и должны использовать его. if(a) - хороший трюк, если вы хотите вывести список, разделенный запятыми.

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

 Смежные вопросы

  • Нет связанных вопросов^_^