1

我想为 Linux Socket API 编写一个 C++ 包装器。我的包装器的方法应该与 API 的底层函数名称相同。

但例如在 bind() 方法中,我使用 Linux 套接字 API 中的普通 C 函数 bind() 。我调用bind(mSocketDescriptor, (struct sockaddr *) &serv_addr, sizeof(serv_addr))它与 API 函数的签名兼容。我的编译器抱怨 Invalid arguments 'Candidates are: bool bind(int)'这指的是我的方法inline bool Socket::bind(int portno)

为什么 Eclipse 指的是包装函数,我如何禁止 Eclipse 这样做?

4

2 回答 2

2

您必须添加一个全局范围限定符:

::bind(mSocketDescriptor, (struct sockaddr *) &serv_addr, sizeof(serv_addr));

范围解析决定了编译器在哪里查找名称。您可以在名称前加上命名空间和/或类范围(例如socket_wrapper::socket::bind())。还有全局范围,系统功能通常存在的地方。这些函数可能以全局范围限定符为前缀::bind(),因此编译器知道不使用同名的本地方法。

还有std命名空间,标准库的类和函数所在的位置。如果您想使用标准库,请在这些名称前加上std::(例如std::iostream, std::cout, std::string, std::vector<>, ...)。

于 2012-11-11T15:17:11.563 回答
0

请使用命名空间。明确!

此外,在您的情况下,应使用 :: 前缀 ::bind 引用 C 调用

于 2012-11-11T15:17:46.317 回答