ошибка C2664: «отправить»: невозможно преобразовать параметр 2 из «ServerGreeting» в «const char *»

Я новичок в C ++ и портирую код C (TWAMP RFC5357) на новый проект (IPSLA RFC 6812), и я столкнулся с этой проблемой:

Когда я пытаюсь использовать функцию Отправить, Я вижу ошибку «ошибка C2664: ‘send’: невозможно преобразовать параметр 2 из ‘ServerGreeting’ в ‘const char *'» «Нет доступного оператора преобразования, определенного пользователем, который может выполнить это преобразование, или оператор не может быть вызван».

Итак, я искал об этом, и я нашел некоторые ответы, которые я не понял.

Вот немного кода:

typedef struct server_greeting
{
UINT8 Не используется [12];
UINT32 Режимы;
UINT8 Challenge [16];
UINT8 Соль [16];
UINT32 Count;
UINT8 MBZ [12];
} ServerGreeting;

struct active_session { int socket; // RequestSession req; }; struct client_info { int socket; sockaddr_in addr; int sess_no; struct active_session sessions[MAX_SESSIONS_PER_CLIENT]; timeval shutdown_time; }; static void cleanup_client (struct client_info *client) { fprintf (stderr,"Cleanup client %s\n", inet_ntoa(client->addr.sin_addr)); FD_CLR(client->socket,&read_fds); closesocket(client->socket); used_sockets--; int i; for (i = 0; i < client->sess_no; i++) /* If socket is -1 the session has already been closed */ if (client->sessions[i].socket > 0) { FD_CLR(client->sessions[i].socket, &read_fds); closesocket(client->sessions[i].socket); client->sessions[i].socket = -1; used_sockets--; } memset(client, 0, sizeof(struct client_info)); //client->status = kOffline; }static int send_greeting(UINT8 mode_mask, struct client_info *client) { int socket = client->socket; int i; ServerGreeting greet; memset(&greet, 0, sizeof(greet)); greet.Modes = 1 & mode_mask; for (i = 0; i < 16; i++) greet.Challenge[i] = rand() % 16; for (i = 0; i < 16; i++) greet.Salt[i] = rand() % 16; greet.Count = (1 << 12); int rv = send (socket, greet, sizeof(greet), 0); if (rv < 0) { fprintf(stderr, "[%s] ", inet_ntoa(client->addr.sin_addr)); perror("Failed to send ServerGreeting message"); cleanup_client(client); } else { printf("Sent ServerGreeting message to %s. Result %d\n", inet_ntoa(client->addr.sin_addr), rv); } return rv; }

Не могли бы вы помочь мне с этим? Спасибо

0

Решение

send функция принимает в качестве второго параметра const char* указатель на буфер, так что вам нужно будет передать адрес вашего struct с соответствующим составом,

int rv = send (socket, (const char*)&greet, sizeof(greet), 0);

Компилятор говорит вам, что он не может выполнить преобразование из структуры, которую вы пытаетесь передать, в ожидаемый тип указателя, вы должны в это поверить.

1

Другие решения


По вопросам рекламы [email protected]