编译器无法分析函数调用

Compiler cannot parse a function call

本文关键字:函数调用 编译器      更新时间:2023-10-16

我有使用recv函数的代码:

#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
char *buf = new char[1000];
int main()
{
        SOCKET ConnectSocket;
        addrinfo hints, *result;
        do{
                result = recv(ConnectSocket, buf, 1000, result);
                result = recv(ConnectSocket, buf, 1000, 0);
                std::cout << result << std::endl;
        } while (result > 0);
}

我将在windows8上运行该代码,cygwin。问题是,当我用g++ -c mmm.cpp复制该代码时,我得到了以下错误:

$ g++ -c mmm.cpp
mmm.cpp: In function ‘int main()’:
mmm.cpp:15:49: error: invalid conversion from ‘addrinfo*’ to ‘int’ [-fpermissive]
   result = recv(ConnectSocket, buf, 1000, result);
                                                 ^
In file included from mmm.cpp:2:0:
/usr/include/w32api/winsock2.h:992:34: note: initializing argument 4 of ‘int recv(SOCKET, char*, int, int)’
   WINSOCK_API_LINKAGE int WSAAPI recv(SOCKET s,char *buf,int len,int flags);
                                  ^
mmm.cpp:15:49: error: invalid conversion from ‘int’ to ‘addrinfo*’ [-fpermissive]
   result = recv(ConnectSocket, buf, 1000, result);
                                                 ^
mmm.cpp:16:44: error: invalid conversion from ‘int’ to ‘addrinfo*’ [-fpermissive]
   result = recv(ConnectSocket, buf, 1000, 0);

这到底是什么意思?首先,编译器告诉我们它无法将addrinfo*转换为int,然后它告诉我们它不能执行反向转换。函数recv(SOCKET, char*, int, int)是否存在?

您正在调用的函数定义如下:

int recv(
  _In_   SOCKET s,
  _Out_  char *buf,
  _In_   int len,
  _In_   int flags
);

在第一种情况下,您将传递一个类型为addrinfo*的变量作为4。论点不能根据函数定义的要求将其转换为int

在第二种和第三种情况下,将int类型的返回值分配给addrinfo*类型的变量,这会导致另一个问题。

相关文章: