c++ - 使用 g++ 编译时如何禁用候选信息?

标签 c++ g++ candidate

我的编译器错误非常长,因为 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/

相关文章:

c++ - 使用 std::vector<> 和 std::shared_ptr<> 会导致错误

c++ - C++ 中的音频操作

c++ - 为什么 g++ 不链接我创建的动态库?

c++ - 为什么有人告诉我数组是指针? C++中数组和指针的关系是什么?

c++ - 这是正确的 : virtual method of Derived called before constructing Base object?

Android:如何在软键盘的候选 View 上制作按钮?

C++ 错误 : "Multiple markers at this time: no matching function for call to" in constructor

c++ - 通过网络(远程屏幕广播应用程序)传输 JPEG 压缩的屏幕图 block 时,是否值得/推荐使用 zlib(或类似的)压缩?

c++ - 什么是应用足迹以及如何计算它?