问题
当使用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)。
在QT环境中使用C/C++的socket编程时,可能会遇到`connect`函数的命名冲突问题。QT的`connect`用于信号与槽的连接,而socket的`connect`用于TCP连接建立。为调用全局的socket连接函数,需要在函数名前添加`::`,如`::connect`。这样做是因为不加`::`时,编译器会默认选择QT的`connect`函数,而添加`::`则是指明要使用的全局函数。
9098

被折叠的 条评论
为什么被折叠?



