【发布时间】:2021-02-20 18:24:45
【问题描述】:
我正在尝试编写一个函数来求解一个二次方程,我在第 26 行得到了这个错误:
Invalid operands to binary expression ('std::ostream' (aka 'basic_ostream<char>' and 'void')
但我不太明白为什么编译器会发誓以及它想从我这里得到什么。我连接了库<ostream>,但它不起作用。请帮我弄清楚!谢谢。
这是代码:
#include <iostream>
#include <math.h>
#include <ostream>
using namespace std;
void Kva(float a,float b, float c)
{
float Diskr, x1, x2;
Diskr = (b*b) - (4*a*c);
if (Diskr >= 0)
{x1 = ((-b) - sqrt(Diskr))/(2*a);
x2 = ((-b) + sqrt(Diskr))/(2*a);
cout << "x1 =" << " " << x1 << ";" << " " << "x2 =" << " " << x2 << endl;}
else {cout << "Diskriminant < 0" << endl;}
//return x1;
}
int main()
{
float a, b, c;
cin >> a >> b >> c;
cout << Kva(a, b, c) << endl;
return 0;
}
【问题讨论】:
-
您正试图打印调用
Kva(a, b, c)的结果,但该调用实际上并没有返回任何结果;该函数被声明为返回void。这就是错误消息告诉您的内容。 -
Kva()返回void但operator<<(std::ostream&, void)没有重载,也无法定义。 (void不是函数/运算符参数的有效类型。)您不能在cout << Kva(a, b, c) << endl;中使用Kva()。这就是错误的原因。 -
@IgorTandetnik 谢谢!我仔细想想。当用户输入他的值 a、b 和 c 时,我想输出 x1 和 x2。但是,如果我不是在编写 void 函数,而是例如 float,那么我不知道如何返回两个“x”,而不仅仅是其中一个
-
目前,您在
Kva()内部进行了输出。因此,只需调用Kva(a, b, c);即可完成输出。但是,有多种方法可以从函数返回多个值。其中之一是将各个值组合在一起,例如带有struct或std::tuple。 (如果您想直接将返回值与std::cout一起使用,则必须为operator<<提供另一个重载。但您只需将返回值分配给局部变量,然后照常进行输出。)