问题描述
我添加时遇到问题
using namespace std;
编译器说没有任何东西可以渴望绑定。
简单例子:
#include <winsock2.h>
#include <mutex>
#include <iostream>
using namespace std;
int main()
{
WSADATA wsa;
long rc = WSAStartup(MAKEWORD(2,0),&wsa);
SOCKADDR_IN addr;
SOCKET acceptSocket = socket(AF_INET,SOCK_STREAM,0);
memset(&addr,sizeof(SOCKADDR_IN));
addr.sin_family = AF_INET;
addr.sin_port = htons(1234);
addr.sin_addr.s_addr = ADDR_ANY;
rc = bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN));
return 0;
}
现在就很简单了
using namespace std;
放弃... 但我还有进一步的:
std::vector<Structs*>::iterator it = m_ClientList.begin();
for (; it != m_ClientList.end(); ++it)
当我删除 using namespace std 时,我收到以下错误消息:
C2672 "std :: invoke": no matching overloaded function found
C2893 Function template "unkNown-type std :: invoke (_Callable &&,_ Types && ...) noexcept (<expr>)" Could not be specialized
我不知道把另一个 std::in 放在哪里
std::vector<Structs*>::iterator it = m_ClientList.begin();
不是在迭代器之前...
解决方法
不要使用using namespace std;
。您遇到了它导致的主要问题:
- 在
std
命名空间中存在一个名为bind
的函数。 -
WinSock2
套接字库中存在一个名为bind
的函数。
通过包含 using namespace std
,编译器不知道选择哪一个。
无论是否使用 using namespace std
,都会强制您通过 std::bind(...)
和 ::bind(...)
消除调用的歧义
您在使用 std::invoke
时遇到的错误是一个单独的问题。您是否包含 <functional>
标头?
至于这个:
std::vector<Structs*>::iterator it = m_ClientList.begin();
for (; it != m_ClientList.end(); ++it)
使用 auto
和 range-based-for-loop
:
for(auto& client : m_ClientList) {
//...
}