Russian Qt Forum

Qt => Вопросы новичков => Тема начата: NellyM от Декабрь 07, 2016, 22:47



Название: не могу разобрать ошибку invalid conversion from ‘ssize_t {aka int}’ to ‘const
Отправлено: NellyM от Декабрь 07, 2016, 22:47
подскажите пожалуйста  как можно конвертировать исправить.
упомянутая ошибка указывает на строку res = read(SocketFd, str, MAX_BUFFER); а конкретно на SocketFd       

 QString ress;     
    const char* res= ress.toLatin1().constData();
      res = read(SocketFd, str, MAX_BUFFER);

объявила ее вот так:   int SocketFd = ::accept(listener, (struct sockaddr*) NULL, NULL);

исходный код  на Си выглядел следующим образом.
 int  SocketFd = accept(listener, (struct sockaddr*) NULL, NULL);   

char res;     
   res = read(SocketFd, str, MAX_BUFFER);

мне срочно нужно его конвертировать в Qt. надеюсь на Вашу помощь


Название: Re: не могу разобрать ошибку invalid conversion from ‘ssize_t {aka int}’ to ‘const
Отправлено: __Heaven__ от Декабрь 08, 2016, 10:50
Данных мало.
Заметил, что раньше был char res, а сейчас const char *res, если сигнатура read не менялась, то странно, почему не ругается компилятор на оператор присваивания.
Покажите больше кода, конкретно сигнатуру read. Используйте теги форматирования для оформления листинга.


Название: Re: не могу разобрать ошибку invalid conversion from ‘ssize_t {aka int}’ to ‘const
Отправлено: Пантер от Декабрь 08, 2016, 10:56
const char* res= ress.toLatin1().constData();
Никогда так не делайте!!!

А QTcpSocket чем не угодил?


Название: Re: не могу разобрать ошибку invalid conversion from ‘ssize_t {aka int}’ to ‘const
Отправлено: __Heaven__ от Декабрь 08, 2016, 11:08
const char* res= ress.toLatin1().constData();
Никогда так не делайте!!!
На всякий случай поясню.
Здесь toLatin1() создаёт временный объект типа QByteArray, деструктор которого вызывается в этой же строке.
Вы у этого временного объекта просите указатель на его член и присваиваете его в res.
После вызова деструктора временного объекта, res становится недействительным указателем.