У меня есть блок устаревшего кода, для которого я пытаюсь реализовать очередь. В целом, у меня есть функция приема сообщений в моем классе, которая выполняет следующее:
void RCVER::receiveMessage(const std::vector<char> &incomingMessage) {
int size = incomingMessage.size();
msgQ.push(incomingMessage);
std::cout << "Received msg of size: " << size << std::endl; //THIS IS GOOD
for(size_t i = 0; i < size-1; i++)
{
std::cout << incomingMessage[i] << std::endl; //DATA IS GOOD HERE
}
}
Где msgQ определяется в заголовке как:
std::queue< std::vector <char> > msgQ;
Позже в Затем в своей цепочке обработки я пытаюсь вытолкнуть данные, которые я поместил в очередь, чтобы в конечном итоге отправить их через соединение TCP / IP. Код выглядит следующим образом:
void RCVER::getMessage(const char* data, int &bytes)
{
std::vector<char> tmp;
if(!msgQ.empty())
{
tmp = msgQ.front();
bytes = tmp.size();
data = &tmp[0];
msgQ.pop();
std::cout << "Pulled msg of size: " << bytes << " off of the queue." << std::endl; //THIS IS GOOD
if(DEBUG)
{
for(size_t i = 0; i < bytes-1; i++)
{
std::cout << data[i] << std::endl; //NOT GOOD - PRINTS BLANK LINES
}
}
}
Моя проблема в том, что, когда я включаю флаг отладки, я просто печатаю пустые строки для размера данных. Размер правильный. Затем код просто отправляет данные, возвращаемые из getMessage, на вызов отправки TCP / IP. Что я делаю неправильно? Я действительно не вижу проблемы с кодом и просто хотел бы, чтобы еще один взгляд на него, чтобы увидеть, действительно ли с ним что-то не так.
У меня нет доступа к получателю TCP / IP, чтобы проверить, что он получает правильные сообщения.
PS Переменная tmp в getMessage была быстрым решением, так как я не смог вытащить вектор из очереди в одну строку. Если кто-то захочет сообщить мне о лучшем способе сделать это, я буду рад этому!
Кроме того, я не самый опытный программист. Я бы предположил, что делать это с шаблонами было бы очень легко, но я совсем не знаком с ними.
Компиляция с: gcc4.9.2, на Linux 2.6.32.