在QT中使用socket编程:解决connect函数名称冲突

问题

当使用QT做可视化界面的时候,我们知道connect函数是连接函数,用于连接信号与槽,但connect在C/C++的socket网络编程中也是一个必不可少的函数,作用是发送连接请求,建立tcp连接。
在QT中直接使用connect会默认当做QT的函数,如果socket编程也用这个函数会报如下错误:

\untitled\login.cpp:67: error: no matching function for call to 'login::connect(SOCKET&, sockaddr*, unsigned int)'
     if(connect(s, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)
                                                        ^                                                      

做法

那么这个时候如何指定我们要使用socket的连接函数呢?
很简单,在connect前面加上::双冒号即可。

//sclient是一个int
if(::connect(sclient, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)
{  //连接失败
    printf("connect error !");
    closesocket(sclient);
    return;
}

原因

究其根本,“::”意味着当存在具有相同名称的局部变量时,要访问全局变量,QT的编程都是在QWidget等类的内部,而socket的connect相当于一个全局的函数,不加::使用的就是QT的connect函数,加上::使用的就是全局的connect函数(socket)。

你可能感兴趣的:(C语言从入门到入土,qt,网络,c++)