0

私は C++ の初心者で、C コード (TWAMP RFC5357) を新しいプロジェクト (IPSLA RFC 6812) に移植していますが、この問題に直面しています。

関数sendを使用しようとすると、「エラー C2664: 'send' : パラメーター 2 を 'ServerGreeting' から 'const char *' に変換できません」「この変換を実行できるユーザー定義変換演算子がありません」というエラーが表示されますまたは、オペレーターを呼び出すことができません。」

それで、これについて検索したところ、理解できない答えがいくつか見つかりました。

コードの一部を次に示します。

    typedef struct server_greeting
    {
       UINT8 未使用[12];
       UINT32 モード;
       UINT8チャレンジ[16];
       UINT8ソルト[16];
       UINT32 カウント;
       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; }

これで私を助けてもらえますか?ありがとう

4

1 に答える 1

1

このsend関数は 2 番目のパラメーターとしてバッファーへのポインターを受け取るため、適切なキャストを使用しconst char*てアドレスを渡す必要があります。struct

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

コンパイラーは、渡そうとしている構造体から期待されるポインターの型への変換を実行できないことを通知します。それを信じてください。

于 2015-05-10T15:38:48.063 に答える