编译器无法分析函数调用
Compiler cannot parse a function call
我有使用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*
类型的变量,这会导致另一个问题。
相关文章:
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 内联asm编译器屏障(内存阻塞器)是算作外部函数,还是算作静态函数调用
- 编译器错误:函数调用在常量表达式中必须有一个常量值
- 编译器 虚拟函数调用的优化
- 为什么将"<<"运算符作为函数调用会导致"ambiguous call"编译器错误?
- 现代编译器是否可以在使用依赖关系注入时取消虚拟化函数调用
- 编译器错过了无效的构造函数调用,并调用不存在的(或私有的)默认构造函数
- 编译器是否对所有内联函数调用执行相同的操作
- 使用递归模板函数是否会引入函数调用开销,或者编译器是否大部分时间都内联它(下面的示例)?
- C函数调用C 成员函数 - 其中C代码与C编译器编译
- C++编译器在一个源文件中的一个函数调用中引发错误,但在具有相同函数调用的另一个源文件中不会引发错误
- 为什么对于内联函数,编译器将尝试在每个调用点生成代码
- C++编译器是否优化重复的函数调用
- 修复删除#includewindows.h和相对函数调用后的编译器错误
- C++错误:没有匹配的调用函数,G++ 编译器
- C/C++编译器如何自动推导某些C函数调用的数组长度
- C++ 中函数调用时编译器错误
- 编译器无法分析函数调用
- 如何告诉编译器向编译的每个函数添加一个函数调用