c++中用类作为返回类型的函数的问题

在c++中用自定义的类作为函数的返回类型出现了这样的问题
比如我在codeblock定义了一个大整数类型A,在也重载了+操作和<<操作,然后定义了a,b,c两个大整数的对象c=a+b这样的操作没问题 cout<<a;也没错 但是在定义了一个函数比如
A F(int n)
{
A f0("0");
B f1("1");
if(n==0)return f0;
if(n==1)return f1;
return F(n-1)+F(n-2);
}
编译的时候会报错 return F(n-1)+F(n-2); 这一句 提示是:error: no match for 'operator+'(operand types are 'A' and 'A')
然后在main函数里用cout<<F(n)的时候也会报错 提示是 error: no match for 'operator<<'(operand types are 'std::ostream {aka std::basic_ostream<char>}' and 'A')

求大神指点!!!!

操作符重载函数的参数类型定义的不对,错误里面提示的很明确了
另外要记得定义拷贝构造函数追问

拷贝构造函数是有的,但是我在不使用函数的时候而是直接c=a+b和cout<<a的时候是没问题的怎么说.. 0.0

温馨提示:内容为网友见解,仅供参考
第1个回答  2016-12-06
看了你追问不知你解决了没有,你的重载+定义了,但是最后一句return的递归会导致,用右值的对象调用重载函数。所以出错。不知对不对。你可以在函数返回类型加个引用验证下。。。汗,才发现你那个f1是B类型的。

如何使 类的成员函数作为回调函数
1). 不使用成员函数,为了访问类的成员变量,可以使用友元操作符(friend),在C++中将该函数说明为类的友元即可。2). 使用静态成员函数,静态成员函数不使用this指针作为隐含参数,这样就可以作为回调函数了。静态成员函数具有两大特点:其一,可以在没有类实例的情况下使用;其二,只能访问静态成员变量和静...

c++中的bool怎么用,它作为函数值的返回类型的时候,该返回什么
bool,一般称为布尔类型,C++中占用1字节,只有true和false两种取值,返回的时候一般是直接返回true或者false,或者是类似于a < 3这一类的布尔表达式。另外,有些非bool类型也可以用于返回,此时如果该返回值在二进制下为全0,则等同于false,否则等同于true。

C++ 函数形参里的const char作为返回值问题
形参是char *类型,实参是cons chart *类型时,编译程序会给出错误信息,意思是被调函数可以改变串的内容,而实参又是const类型,这样的实参不允许改变,二者之间不能融合,即使函数不改变形参的内容也不行。但形参是const char *,实参是 char *是可行的,当要返回形参指针时,其返回类型必须是const ...

C++中返回引用的作用是什么?没有&就是不引用也没多大问题吧?
不能返回局部变量的引用。这条可以参照Effective C++[1]的Item 31。主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了“无所指”的引用,程序会进入未知状态。不能返回函数内部new分配的内存的引用。这条可以参照Effective C++[1]的Item 31。虽然不存在局部变量的被动销毁问题,可对于这...

C++中,return 0 和 return -1有什么区别,程序运行到该语句时会不会产 ...
与C语言不同,C++的main函数返回类型既可以是void,也可以是int,但C++的设计者更主张程序员们用int作为main函数的返回类型,所以main执行完后应该返回一个整数告诉操作系统程序执行的情况。只要是一个整数就行,就像一般的函数一样,return表示函数结束,在main中return一个整数之后,main函数执行完毕,也即...

C++中函数类型与定义的函数返回值类型必须相同么?
C++函数返回值类型 C\/C++规定函数的返回值不能是函数类型或者数组类型,只能用函数指针或者数组指针来代替。c中函数返回值类型怎么确定呢 分为地址传递和值传递,两者返回值不同,你好好看看书上关于这两者的介绍 C语言中,在定义函数时,函数返回值类型与形式参数的类型一定要与声明函数时函数返回值类型与...

返回值C++中的返回值
在C++中,函数可以带有返回值,也可以无返回值。无返回值的函数主要用于完成特定操作,其返回类型应设为void,无需使用return语句。例如,`void backward(int n)`函数用于倒序输出输入整数,如果需要退出,可以在适当位置添加return。在`main`函数中,通过调用这个函数并输出结果来实现。对于有返回值的函数...

C++返回引用类型
int & fun() { int a; a=10; return a; } 这样是不行的,因为a会在fun退出时被销毁,这时返回的a的引用是无效的。这种情况下,如果fun的返回类型不是int & 而是int就没有问题了。因此,要返回一个引用时,“临时变量”不能是“临时”的,至少得等函数外部使用完毕这个引用之后,才能销毁它...

C++中如果要用的类定义在使用之后,该怎样声明?
不完全类型(incomplete type)只能以有限方式使用。不能定义该类型的对象。不完全类型只能用于定义指向该类型的指针及引用,或者用于声明(而不是定义)使用该类型作为形参类型或返回类型的函数。include<iostream.h> include<stdio.h> include <conio.h> class A;class B { private:int i;A &a;public...

C++单选题:定义类A的成员函数A* f(A a)const时,下列哪个适合作为函数的...
首先 A答案: 参数(A a) 是个复制到函数内的局部变量。所以返回一个局部变量的指针,是不可以的。因为函数内局部变量在函数调用结束之后会被释放。B答案: 类A中定义的类型为A*的静态数据成员, 这个是可以的。因为它不受任何限制。所谓static变量,无论是不是在类中,他都是存在程序的全局静态表中...

相似回答