问题
当使用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)。