我只是在尝试一个关于异常处理的例子。 我收到错误错误:'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 *'
答案 0 :(得分:1)
变量a
是指针到double
变量c
是double
表达式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*
作为参数。并且代码a
和b
是double*
。
因此,取消引用a
和b
会返回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;
}