忽略#pragma 注释 ws2_32.lib [-Wunknown-pragmas]
ignoring #pragma comment ws2_32.lib [-Wunknown-pragmas]
我正在尝试使用 Qt 创建程序编译一些 C++ 代码,该代码必须连接到用于发送和接收数据的套接字。我已经链接了库文件,添加了标志 win32: LIBS+= -lWS2_32
。附上下面的代码片段:
...
#include<winsock2.h>
#pragma comment(lib,"Ws2_32.lib")
#include<windows.h>
...
WSADATA wsa;
SOCKET s;
uint8_t* encode_buffer;
uint8_t* decode_buffer;
uint16_t encode_buffer_length;
uint16_t decode_buffer_length;
if (send(s, encode_buffer, encode_buffer_length,0)<0){
...
}
if((recv_size=recv(s, decode_buffer, decode_buffer_length,0))== SOCKET_ERROR){
...
}
我的以下问题是:
Warning: ignoring #pragma comment [-Wunknown-pragma]
Error: invalid conversion from 'uint8_t* {aka unsigned char*} to 'const char*'[-fpermissive]
Error: invalid conversion from 'uint8_t* {aka unsigned char*} to 'char*'[-fpermissive]
Error: no matching function for call to 'send'
Error: no matching function for call to 'recv'
Warning: unknown pragma ignored
我已将 ws2_32.lib
文件作为外部库添加到项目中,并在 #pragma
指令中提及它。
不确定我哪里出错了。
编辑:谢谢! Reinterpret_cast 解决了问题
关于 警告 (不是错误),大多数编译器不支持您使用的 #pragma
(Microsoft 和 Embarcadero 编译器支持)。所以完全删除它(你已经 link 到项目 makefile 中的库),或者至少用适当的 #if/def
.
禁用它
至于其余的 错误 、send()
和 recv()
需要 char*
指针,而不是 uint8*
指针。一个简单的 type-cast 就足够了。
试试这个:
...
#if defined(_MSC_VER) || defined(__BORLANDC__)
#pragma comment(lib,"Ws2_32.lib")
#endif
...
if (send(s, reinterpret_cast<char*>(encode buffer), encode_buffer_length, 0) < 0) {
...
}
if ((recv_size = recv(s, reinterpret_cast<char*>(decode buffer), decode_buffer_length, 0)) == SOCKET_ERROR) {
...
}
...
我正在尝试使用 Qt 创建程序编译一些 C++ 代码,该代码必须连接到用于发送和接收数据的套接字。我已经链接了库文件,添加了标志 win32: LIBS+= -lWS2_32
。附上下面的代码片段:
...
#include<winsock2.h>
#pragma comment(lib,"Ws2_32.lib")
#include<windows.h>
...
WSADATA wsa;
SOCKET s;
uint8_t* encode_buffer;
uint8_t* decode_buffer;
uint16_t encode_buffer_length;
uint16_t decode_buffer_length;
if (send(s, encode_buffer, encode_buffer_length,0)<0){
...
}
if((recv_size=recv(s, decode_buffer, decode_buffer_length,0))== SOCKET_ERROR){
...
}
我的以下问题是:
Warning: ignoring #pragma comment [-Wunknown-pragma]
Error: invalid conversion from 'uint8_t* {aka unsigned char*} to 'const char*'[-fpermissive]
Error: invalid conversion from 'uint8_t* {aka unsigned char*} to 'char*'[-fpermissive]
Error: no matching function for call to 'send'
Error: no matching function for call to 'recv'
Warning: unknown pragma ignored
我已将 ws2_32.lib
文件作为外部库添加到项目中,并在 #pragma
指令中提及它。
不确定我哪里出错了。
编辑:谢谢! Reinterpret_cast 解决了问题
关于 警告 (不是错误),大多数编译器不支持您使用的 #pragma
(Microsoft 和 Embarcadero 编译器支持)。所以完全删除它(你已经 link 到项目 makefile 中的库),或者至少用适当的 #if/def
.
至于其余的 错误 、send()
和 recv()
需要 char*
指针,而不是 uint8*
指针。一个简单的 type-cast 就足够了。
试试这个:
...
#if defined(_MSC_VER) || defined(__BORLANDC__)
#pragma comment(lib,"Ws2_32.lib")
#endif
...
if (send(s, reinterpret_cast<char*>(encode buffer), encode_buffer_length, 0) < 0) {
...
}
if ((recv_size = recv(s, reinterpret_cast<char*>(decode buffer), decode_buffer_length, 0)) == SOCKET_ERROR) {
...
}
...