C++ 是一种优秀的重量级编程语言,但没有人想出如何让它发出可读的错误消息。恐怕您提到的错误消息很复杂,因为从编译器的角度来看,错误很复杂。如果您花时间仔细阅读该信息,并想一想,您可能会开始理解为什么必须如此。
让我们分解您的错误消息:
server.cpp:78:51: note: candidates are:
这意味着错误似乎起源于server.cpp 的第 78 行(或者是第 51 行?)。 但是,编译器认为这是错误的原因是在 Boost 标头asio/buffer.hpp 中找到的。 检查该标头可能是徒劳的,因为标头可能既复杂又正确。尽管如此,错误消息的下一行从 Boost 标头中提取了您需要的信息:
note: boost::asio::mutable_buffers_1 boost::asio::buffer(const boost::asio::mutable_buffer&)
所以,回到server.cpp 的第 78 行,你调用了boost::asio::buffer()
,对吗?作为括号之间的参数,该函数需要一个类型为 的对象boost::asio::mutable_buffer
。你给了一个吗?如果是,你确定吗?显然,出于某种原因,编译器不会将您的参数识别为具有正确的类型。
现在让我们看一下错误的第三行:
note: candidate expects 1 argument, 2 provided
所以,实际上,回到server.cpp 的第 78 行,你给boost::asio::buffer()
. 也就是说,你调用boost::asio::buffer(x, y)
了而不是boost::asio::buffer(x)
-- 或者,如果你没有调用,编译器会认为你调用了。
跟踪这些步骤。他们应该解决你的问题。
有关信息,我经常收到占满一半或更多屏幕的 C++ 错误消息。我不像你那样喜欢它们,但我确实理解编译器为什么会发出它们。当库功能被滥用时,C++ 强大的模板工具尤其会产生一些相当严重的错误消息。这是语言的本质。如果一个人会用 C++ 编程,那么除了让自己适应这种性质外,几乎什么都做不了。