c++ - c++ using namespace std 导致 bind () 错误和迭代器放弃
问题描述
我添加时遇到问题
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, 0, 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
Sockets 库中有一个名为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) {
//...
}
推荐阅读
- sql - 通过在 SQL 中对 txn 月份进行分组来对查询进行分组以查找数据
- java - 输出到 CSV 文件时尝试去掉“[”
- javascript - 输入 ID 后填充数据
- javascript - 如何取消延迟输入事件?
- python - 做一个评分系统
- html - 将文本与标签底部对齐
- java - 访问字段时出错:在 Hibernate 中使用 @OneToMany 注释
- android - Flutter - 音频播放器错误:未处理的异常:无法加载资产:然后“
" - python - TypeError: 只能在使用 len()、input() 和 print() 时将 str(不是“int”)连接到 str
- flutter - 使用来自 json 数据的数据过滤列表时出错,该方法在 null 上调用