gpt4 book ai didi

c++ - 命名冲突。 C++ 和 OS 库(纯 C)

转载 作者:太空宇宙 更新时间:2023-11-04 02:59:51 25 4
gpt4 key购买 nike

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

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

为什么 Eclipse 引用包装函数,我如何禁止 Eclipse 这样做?

最佳答案

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

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

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

还有 std命名空间,标准库的类和函数所在的地方。如果你想使用标准库,你可以在这些名字前加上std::。 (例如 std::iostream, std::cout, std::string, std::vector<>, ... )。

关于c++ - 命名冲突。 C++ 和 OS 库(纯 C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13332435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com