singlepost

Преобразование типов С++ << На главную или назад  

Прямой эфир с Русскоговорящей суперборды:
Чуваки.com Webmaster:Nolix Official BoardПредложения по улучшению системы Nolix
Анонимно → ПсихологияЛюбовь между женщиной и молодой девушкой
Анонимно → ИнвайтницаИнвайты на Лепру
Rostislav Morinov:Мейкаем маниЗаработок в Интернете
Анонимно → Умные мыслиПлохи дела или хороши?
Анонимно → Nolix Official BoardТемы оформления рекламных строчек
Анонимно → Влажные фантазииРолевые игры в пастели (сценарии)

Есть структура
typedef struct Tmess
{
String nick[16];
String adr[4];
String data[10];
} mess;

процедура logg()

void __fastcall logg(String s)
{
Form1->mLog->Lines->Add(s);
}

b кусочек кода.

s=ClientSocket->ReceiveBuf(buf,sizeof(mess));
mess *msg = static_cast<mess *>(buf);
msg=(mess*)buf;
logg(msg->data);

все бы хорошо, но происходит завал на
logg(msg->data);
с ошибкой E2034 Cannot convert 'UnicodeString *' to 'UnicodeString'

что тут можно сделать?

21 ответов в теме “Преобразование типов С++”

Страницы: [1] 2 3 »

  1. 1
    Денис Боенсков ответил:

    если "Cannot convert 'что-то *' to 'что-то'", то при обращении к данным надо использовать "*", т.е. logg(*msg->data);

  2. 2
    Юрий Лисичкин ответил:

    void __fastcall logg(String s)

    это функция которая принимает в качестве параметра переменную типа String.

    а mess->data определено как String data[10];

    т.е. массив из 10 элементов типа String
    Этот массив воспринимается как String*, т.к. в Си имя массива одновременно является указателем на его первый элемент.

    соответственно logg(mess->data) не работает

  3. 3
    Юрий Лисичкин ответил:

    Чего делать – исправить =)

  4. 4
    Артем Никитин ответил:

    Если String STL'евский то у данного класса есть метод возвращющий массив типа char, c_str() называется.

  5. 5
    Андрей Поповский ответил:

    Спасибо ^_^

  6. 6
    Роман Труба ответил:

    Видимо, автор не совсем понимает, что он хочет.
    В структуре поля определены как
    String nick[16];
    String adr[4];
    String data[10];
    Но что ты подразумеваешь под цифрами в скобках? Длину строк?
    Это неверно, так ты создаешь каждому полю по массиву, с количеством элементов в скобках.
    Используй, действительно, обычный STL'евский string
    string nick;
    string adr;
    string data;

    Либо же тебе нужно переделать logg, если ты считаешь, что все правильно:
    void __fastcall logg(String *s) {…}

  7. 7
    Андрей Поповский ответил:

    Да, я вернулся к STL. За доп. инфу спасибо.
    А как мне задать длинну для строки?

  8. 8
    Роман Труба ответил:

    Собственно, в stl строка ограничивается очень большим числом. Зачем тебе об этом беспокоиться?
    Просто проверяй входные данные.

  9. 9
    Андрей Поповский ответил:

    В продолжение темы о чате.

    Отсылаю данные с клиента

    void __fastcall TForm1::edSendKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
    {
    mess *msg;
    if (Key==char(13))
    {
    msg->nick=edNick->Text;
    msg->adr="All";
    msg->data=edSend->Text;
    void *buf = static_cast<void *>(msg);
    Sock->SendBuf(buf,sizeof(mess));
    }
    }

    Принимаю на сервере

    void __fastcall TForm1::SockAccept(TObject *Sender, TCustomIpClient *ClientSocket)
    {
    int s;
    void *buf;
    logg("Client from " + ClientSocket->RemoteHost + " added no stream");
    do {
    s=ClientSocket->ReceiveBuf(buf,sizeof(mess));
    mess *msg = static_cast<mess *>(buf);
    logg(msg->data);
    if (msg->adr=="exit") {s=1;}
    } while (s==1);
    logg("Client from " + ClientSocket->RemoteHost + " passed no stream");
    }

    Но в mess билиберда полнейшая… Я где-то туплю?
    класс mess идентичен.

  10. 10
    Роман Труба ответил:

    При дебаге отправки нормальные поля?
    И что за реализация Sock? MFC? O_o

Страницы: [1] 2 3 »

Ответить

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.