我的编译器错误非常长,因为g ++告诉我许多'候选'用于我使用错误的函数。我该怎么办?
server.cpp:78:51: note: candidates are:
/usr/include/boost/asio/buffer.hpp:599:26: note: boost::asio::mutable_buffers_1 boost::asio::buffer(const boost::asio::mutable_buffer&)
/usr/include/boost/asio/buffer.hpp:599:26: note: candidate expects 1 argument, 2 provided
... 30 lines of error for one wrong line of code
答案 0 :(得分:4)
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)
- 或者,如果你没有,那么编译器会认为你有。{/ p>
跟踪这些步骤。他们应该解决你的问题。
有关信息,我经常会收到填满屏幕一半或更多屏幕的C ++错误消息。我不喜欢它们,但我确实理解为什么编译器会发出它们。当库函数被滥用时,C ++强大的模板工具尤其会产生一些非常重要的错误消息。这是语言的本质。如果一个人用C ++编程,那么人们可以做的很少,但会使自己与这种性质相协调。