我的编译器错误非常长,因为 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
最佳答案
C++ 是一种优秀的重量级编程语言,但没有人想出如何让它发出可读的错误消息。恐怕您提到的错误消息很复杂,因为从编译器的角度来看,错误 很复杂。如果您花时间仔细阅读邮件并思考一会儿,您可能会开始理解为什么一定会这样。
让我们分解您的错误消息:
server.cpp:78:51: note: candidates are:
这意味着错误似乎起源于 server.cpp 的第 78 行(或者是第 51 行?)。 但是,编译器认为这是一个错误的原因是在Boost header ,asio/buffer.hpp。检查该 header 可能没有结果,因为该 header 可能既复杂又正确。然而,错误消息的下一行从 Boost header 中提取了您需要的信息:
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++ 编程,那么除了接受这种本性之外别无他法。
关于c++ - 使用 g++ 编译时如何禁用候选信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11236890/