【问题标题】:Compiler mixing between write from Boost::ASIO and unistd writeBoost::ASIO 写入和 unistd 写入之间的编译器混合
【发布时间】:2014-05-03 12:55:17
【问题描述】:

我正在尝试使用 Boost 中的 b2 工具编译我的代码。我的代码是用 C++ 编写的,并且包含来自 C 库之类的一些函数调用。

在编译阶段,编译器会在两个函数之间混合,写入函数是 unistd 的一部分,而写入函数是 Boost 库的一部分。

/home/ha/MIH/boost_1_49_0/boost/asio/impl/write.hpp:79:77: 从 'std::size_t boost::asio::write(SyncWriteStream&, const ConstBufferSequence&, CompletionCondition) [with SyncWriteStream = int,ConstBufferSequence = message*,CompletionCondition = long unsigned int,std::size_t = long unsigned int]' socketmid.cpp:152:61: 从这里实例化

错误发生在 unistid.h 中使用的 write 函数中,如下所示:

if (write(peer_fd, &confirm, sizeof (struct message)) < 0)
{
    ......   
}

那么我该如何解决这个问题呢?因为据我所知,我不能为 C 函数使用命名空间。

【问题讨论】:

    标签: c++ c boost


    【解决方案1】:

    您似乎是从 C++ 代码中调用它(否则 Boost Asio 无论如何都无法工作),因此您应该能够使用完全限定的命名空间,例如boost::asio::write::write

    【讨论】:

    • 你说得对,但正如我所说,我的问题在于 unistd 的 write 函数,我使用它通过套接字发送数据。
    • 您可以使用 ::write() 使其明确。或者可以停止将整个 boost::asio 命名空间导入你的全局命名空间以避免问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多