错误:"运算符>>"不匹配

error: no match for ‘operator>>’

本文关键字:gt 不匹配 运算符 错误      更新时间:2023-10-16

我只是在尝试一个关于异常处理的例子。我收到错误错误:"运算符>>不匹配我的程序出了什么问题。我正在使用 linux gcc。

#include<iostream>
using namespace std;
void div(double, double);
void read (double *, double *);
main()
{
    double a,b;
    cout<<"enter the two nos";
    cin>>a>>b;
    read(&a,&b);
    div(a,b);
}
void div(double a, double b)
{
    double d;
    try {
        if(b==0)
        throw "divide by zero condition occured";
        d=a/b;
        cout<<"divsion of two no is"<<d<<endl;
    }catch(const char *e)
    {
        cout<<"exception is "<<e<<endl;
    }
}
void read(double *a,double *b)
{
    cout<<"Enter the 2 no.";
    cin>>a>>b;
}

我还尝试了另一个读取函数

void read(double *a,double *b)
{
    double c,d;
    cout<<"Enter the 2 no.";
    cin>>c>>d;
    a=c;
    b=d;
}

但它也有错误:

无法在赋值中将"双精度"转换为"双精度*">

变量a是指向double指针
变量c是一个double
表达式a = c;double分配给指向double指针

尝试: *a = c;

void read(double *a,double *b)
{
    cout<<"Enter the 2 no.";
    cin>>a>>b;
}

将其更改为

void read(double *a,double *b)
{
    cout<<"Enter the 2 no.";
    cin>>*a>>*b; 
}

因为对象cin有一个名为 operator>> 的方法,该方法被重载以处理不同类型的数据。就像operator>>(short& __n)short数据类型获取输入一样,operator>>(float& __f)float数据类型获取输入。但是该方法的重载版本没有double*作为参数。在代码中ab double*.因此,取消引用ab返回double并且有一个重载版本的operator>>,它将double作为operator>>(double& __f)的参数。因此,将cin>>a>>b更改为cin>>*a>>*b将按预期工作。

void read(double *a,double *b)
{
    double c,d;
    cout<<"Enter the 2 no.";
    cin>>c>>d;
    a=c;
    b=d;
}

这不起作用,因为您要更改指针指向的值,而不是指针本身,从而导致错误。将其修复为:

void read(double *a,double *b)
{
    double c,d;
    cout<<"Enter the 2 no.";
    cin>>c>>d;
    *a=c;
    *b=d;
}

当然,在这种情况下,我不建议使用指针,最好使用引用,因此不需要取消引用,您可以像read(a,b)这样调用它:

void read(double &a,double &b)
{
    double c,d;
    cout<<"Enter the 2 no.";
    cin>>c>>d;
    a=c;
    b=d;
}

double& b表示法表示按引用传递。您的其他读取函数也遇到了同样的问题,请将其修复为:

void read(double *a,double *b)
{
    cout<<"Enter the 2 no.";
    cin>>*a>>*b;
}

或更好:

void read(double &a,double &b)
{
    cout<<"Enter the 2 no.";
    cin>>a>>b;
}

您需要在指针处赋值:

*a=c;
*b=d;