Есть структура
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'
что тут можно сделать?



5 июля 2009 в 13:00
если "Cannot convert 'что-то *' to 'что-то'", то при обращении к данным надо использовать "*", т.е. logg(*msg->data);
5 июля 2009 в 13:01
void __fastcall logg(String s)
это функция которая принимает в качестве параметра переменную типа String.
а mess->data определено как String data[10];
т.е. массив из 10 элементов типа String
Этот массив воспринимается как String*, т.к. в Си имя массива одновременно является указателем на его первый элемент.
соответственно logg(mess->data) не работает
5 июля 2009 в 13:02
Чего делать – исправить =)
5 июля 2009 в 14:00
Если String STL'евский то у данного класса есть метод возвращющий массив типа char, c_str() называется.
5 июля 2009 в 17:01
Спасибо ^_^
6 июля 2009 в 6:00
Видимо, автор не совсем понимает, что он хочет.
В структуре поля определены как
String nick[16];
String adr[4];
String data[10];
Но что ты подразумеваешь под цифрами в скобках? Длину строк?
Это неверно, так ты создаешь каждому полю по массиву, с количеством элементов в скобках.
Используй, действительно, обычный STL'евский string
string nick;
string adr;
string data;
Либо же тебе нужно переделать logg, если ты считаешь, что все правильно:
void __fastcall logg(String *s) {…}
6 июля 2009 в 13:05
Да, я вернулся к STL. За доп. инфу спасибо.
А как мне задать длинну для строки?
6 июля 2009 в 15:00
Собственно, в stl строка ограничивается очень большим числом. Зачем тебе об этом беспокоиться?
Просто проверяй входные данные.
6 июля 2009 в 18:02
В продолжение темы о чате.
Отсылаю данные с клиента
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 идентичен.
6 июля 2009 в 19:02
При дебаге отправки нормальные поля?
И что за реализация Sock? MFC? O_o