C++ 在使用g++;?

C++ 在使用g++;?,c++,g++,candidate,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/

我的编译器错误非常长,因为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头文件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++中的程序是C++的,那么可以做一些事情,但要协调自己的本性。

< P> 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++编程,

用“代码> GRP< <代码>输出输出。code>g++a.cpp | grep error似乎符合我的要求。您可以使用
grep-v“:note:“
确定”来过滤注释。我还需要做一个更正;这管道只适用于标准管道。更正的命令是
g++error.cpp 2>&1 | grep-v”:注意:“
grep
过滤输出。我真的没有想到这一点
g++a.cpp | grep error
似乎符合我的要求。您可以使用
grep-v“:note:“
确定”来过滤注释。我还需要做一个更正;这管道只适用于标准管道。更正的命令是
g++error.cpp 2>&1|grep-v”:注意: