错误:不匹配'operator>>'

时间:2016-09-03 16:18:12

标签: c++

我只是在尝试一个关于异常处理的例子。 我收到错误错误:'operator>>'不匹配 我的计划有什么问题。 我正在使用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;
}

但它也有错误:

  

无法在作业

中将'double'转换为'double *'

4 个答案:

答案 0 :(得分:1)

变量a指针double 变量cdouble 表达式a = c;double分配给指针double

尝试:*a = c;

答案 1 :(得分:1)

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*作为参数。并且代码abdouble*。 因此,取消引用ab会返回double,并且会有operator>>的重载版本,其double作为operator>>(double& __f)的参数。因此,将cin>>a>>b更改为cin>>*a>>*b将按预期工作。

答案 2 :(得分:0)

您需要指定指针处的值:

*a=c;
*b=d;

答案 3 :(得分:0)

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;
}