У вас есть несколько ошибок здесь.
MessageStruct * msg = new MessageStruct();
msg->prior = 0;
msg->msg = "queue exists";
queue->getMsg(msg);
size *= 2;
for (int ii = 0; ii < size; ii++){
msg->prior = 0;
msg->msg = "creating thing " + ii;
queue->getMsg(msg);
}
Прежде всего, ошибка стиля. «Получить» - это глагол, обычно используемый для обозначения «Я хочу, чтобы объект дал мне что-то». Ваш метод "getMsg ()" на самом деле означает "я даю объекту что-то", что может сбить с толку любого, кто смотрит на ваш код. Вы должны переименовать это в «pushMsg ()», «addMsg ()» или что-то подобное. Чтобы быть абсолютно точным, вы не должны использовать сокращения. "pushMessage ()", пожалуй, лучшее название для этого.
Далее вы делаете основную ошибку в отношении указателей. Вы выделяете один MessageStruct, а затем постоянно меняете его данные. Вам нужно создать новую структуру для каждого фрагмента данных, который вы вставляете в свою очередь, например:
MessageStruct * msg = new MessageStruct();
msg->prior = 0;
msg->msg = "queue exists";
queue->getMsg(msg);
size *= 2;
for (int ii = 0; ii < size; ii++){
MessageStruct * anotherMsg = new MessageStruct();
anotherMsg->prior = 0;
anotherMsg->msg = "creating thing " + ii;
queue->getMsg(anotherMsg);
}
(Вы можете игнорировать эту ошибку, если ваша реализация MessageQueue создает полную копию структуры, которую вы передаете через указатель, но я бы серьезно подумал о пересмотре этого дизайна, чтобы более точно следовать поведению std :: vector.)
Наконец, вы не можете добавлять числа к строкам в C ++, используя «mystring + mynumber». В вашем коде это стандартная C-строка:
"creating thing"
C-строка - это массив чисел, которые представляют коды ASCII. Упрощенный способ думать о том, как С работает с массивами, - просто представить, что они являются указателями на последовательный блок памяти. Если я добавлю целое число к указателю, то получу адрес памяти этого указателя плюс мое целое число. Итак, в этом случае строки, которые вы получаете:
"creating thing" + 0 = "creating thing"
"creating thing" + 1 = "reading thing" // Pointer + 1 gives a string starting at "r"
"creating thing" + 2 = "eading thing" // Pointer + 2 gives a string starting at "e"
Etc.
Вот как строки и массивы работают в C:
string + integer == string[integer]
Я предполагаю, что вы пришли к этому из чего-то вроде C # или JavaScript. C и C ++ не очень полезны.