【问题标题】:Multiple #includes, different functions, same name: How to differentiate them? [duplicate]多个#include,不同的功能,相同的名称:如何区分它们? [复制]
【发布时间】:2020-05-15 15:16:49
【问题描述】:

这里似乎有点问题,这可能是一个非常愚蠢的问题:

#incude <thread>

#include <winsock2.h>

两者都包含一个名为 bind() 的函数。 我想调用这个 winsock2 绑定:

bind(listenerSocket._internalCustomSocket, (sockaddr*)&listenerSocket._peer, listenerSocket._peerLength)

其中 listenerSocket 是我的自定义套接字类,如下所示:

class CustomSocket
{
public:
    CustomSocket(int port);
    ~CustomSocket();

    SOCKET OpenSocket(Listener* host);

    int _port;
    SOCKET _internalCustomSocket;
    sockaddr_in _peer;
    int _peerLength;

};

但是,它默认使用看起来像的 bind()

_NODISCARD inline _Binder<_Unforced, _Fx, _Types...> bind(_Fx&& _Func, _Types&&... _Args)

我如何指定我要调用的是哪一个?

到目前为止我发现的唯一解决方案是不包含包含

【问题讨论】:

  • 你的程序中有using namespace std;吗?如果是这样,请尝试将其删除。或者,使用 ::bind 应该可以。
  • 是的,这会是问题的根源吗?
  • @HolyBlackCat 现在会尝试一下

标签: c++ winsock2


【解决方案1】:

首先,从您的代码中消除对using namespace std; 的任何使用。那只会把事情搞砸。

然后,要访问 Winsock 的绑定,你可以这样写:

::bind (...);

要访问STL中bind的版本,可以这样写:

std::bind (...);

现在您知道命名空间的用途了。

【讨论】:

  • 如果 OP 删除了using namespace std;,那么可以使用bind 代替::bind
猜你喜欢
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-25
相关资源
最近更新 更多