【高手进】C++小错误求教 20
我自定义了一个结构bignbignoperator+(bignb)//加法重载ostream&operator<<(ostream&out,bign&n)//输出流重载然...
我自定义了一个结构bign
bign operator +(bign b)//加法重载
ostream& operator << (ostream& out, bign& n)//输出流重载
然后我
bign a=1234,b=1234;
cout<<a+b;(出错在这行)
结果报错!
[Error] no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>})
请问是哪里出问题??
bign c=a+b;
cout<<c; 这样不会报错
但cout<<a+b;就会报错 展开
bign operator +(bign b)//加法重载
ostream& operator << (ostream& out, bign& n)//输出流重载
然后我
bign a=1234,b=1234;
cout<<a+b;(出错在这行)
结果报错!
[Error] no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>})
请问是哪里出问题??
bign c=a+b;
cout<<c; 这样不会报错
但cout<<a+b;就会报错 展开
2个回答
展开全部
#include <iostream>
#include <string>
using namespace std;
//复数类
class Complex{
private:
float a; //复数实部
float b; //复数虚部
public:
Complex(float fa, float fb=0) :a(fa), b(fb){}
Complex operator+(Complex c) const;//重载加法
friend ostream& operator<<(ostream& out, const Complex c);
};
Complex Complex::operator+(Complex c) const{
c.a += this->a;
c.b += this->b;
return c;
}
ostream& operator<<(ostream& out, Complex c){
if (c.b != 0)
out << c.a << "+" << c.b << "i";
else
out << c.a;
return out;
}
int _tmain(int argc, _TCHAR* argv[])
{
Complex c1(2, 3);
Complex c2(3);
cout << c1 + c2 << endl;
return 0;
}
追问
你好我加法和输出流全部重装过了
bign c=a+b;
cout<<c; 这样不会报错
但cout<<a+b;就会报错
追答
不知道你具体是怎么重载的。
但是这里加法+为双目运算符。说明一个双目运算符函数为非静态成员函数:
ret-type oprator op(arg);
其中ret-type是返回类型,op是被重载的运算符,而arg则是一个任意类型的参量。
说明一个双目运算符为全局函数,必须按如下形式说明:
ret-type operator op(arg1, arg2)
其中ret-type和op同成员函数中的描述是一致的,而arg1和arg2是参量。至少其中之一必须是类类型。
根据错误信息,是输出流<<没有找到匹配函数。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询