C++运算符重载的问题,请问,为什么会错呢?谢谢

源代码如下:
#include<iostream>
using namespace std;
class Test
{
public:
Test(int x,int y){a=x;b=y;} //构造函数
Test operator +(Test t2); //预算福+重载成员函数
void show(); //输出
private:
int a,b;
};
Test Test::operator + (Test t2) //重载运算符函数实现
{
return Test(a+t2.a,b+t2.b);
}
void Test::show()
{
cout<<"("<<a<<","<<b<<")"<<endl;
}
//主函数
void main()
{
Test t1(1,2),t2(3,4),t3;
t3=t1+t2;
t3.show();

}

一编译,就报错:
--------------------Configuration: Test - Win32 Debug--------------------
Compiling...
Test.cpp
D:\C++\Test.cpp(23) : error C2512: 'Test' : no appropriate default constructor available
执行 cl.exe 时出错.

Test.exe - 1 error(s), 0 warning(s)
为什么呢??
我用的编译器是VC6.0,谢谢了哈!
这个,也麻烦一下,帮我修改下嘛...
我照到书上打的....

在public部分补一个Test(){}就可以了。
报错是因为没有合适的构造函数来初始化t3
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-05-15
1L正解
////////////

#include<iostream>
using namespace std;
class Test
{
public:
Test(int x=0,int y=0){a=x;b=y;} //构造函? /////////////////////////////////////////////////////////////
Test operator +(Test t2); //?算福+重?成?函?
void show(); //?出
private:
int a,b;
};
Test Test::operator + (Test t2) //重??算符函???
{
return Test(a+t2.a,b+t2.b);
}
void Test::show()
{
cout<<"("<<a<<","<<b<<")"<<endl;
}
//主函?
void main()
{
Test t1(1,2),t2(3,4),t3;
t3=t1+t2;
t3.show();

}
第2个回答  2009-05-15
no appropriate default constructor available
没有合适的默认构造函数

t1,t2都有参数,错在t3上

请教c++运算符重载程序报错原因
这可能是编译器的原因。有些低版本的编译器,除了在类中申明友元关系之外,还要在类定义前对函数进行前向声明。如:Class Time;Time& operator++(Time& a);Time operator++(Time& a,int);ostream& operator<<(ostream& o,const Time& t);如果你用的是vc6.0的话就会出现这种情况。虽然重载运算符...

c++运算符重载
说重载的+运算符必须有一个参数是类类型。而你的两个参数都是一个指向二维数组的指针,这显然是错误的。而且我显然不能够看明白你重载这个运算符想要完成什么任务。

求助,关于一道C++函数重载的问题
1、运算符重载不改变操作符原先的优先级、结合性和操作数数目,++是单目操作符,所以1不会成立的。你有这样的问题大概是因为双目操作符比如*,可以有x.operator*(y)这种写法吧? 但是这个不改变*是二目操作符的事实。C++规定:双目操作符重载作为成员函数时只能有一个形参,调用方为左操作数,形参...

c++关于运算符重载的问题
1 char &operator[](int i);\/\/请说明此行的&是什么作用 函数的声明,防止在没有定义函数实体之前,被早先调用致使编译错误 2 char &charArray::operator[](int i)\/\/&是什么用,去掉会出错 返回的是一个char 型的变量,去掉的话返回的是char型的值。前者可以作为变量对它进行赋值。后者只是一个...

C++重载问题
把 “int main()”改成int main()”即可。原来的括号是中文输入状态下的,系统会报错。

C++复合赋值运算符的重载
第一句是指Fraction operator+=();?这句肯定是错的,因为它和你下面的定义的函数头不匹配(一个有一个int参数,一个没有参数,两者的参数列表和返回值类型应该都要保持一致的)

c++运算符重载
c++的一大特性就是重载(overload),通过重载可以把功能相似的几个函数合为一个,使得程序更加简洁、高效。在c++中不止函数可以重载,运算符也可以重载。由于一般数据类型间的运算符没有重载的必要,所以运算符重载主要是面向对象之间的。在进行对象之间的运算时,程序会调用与运算符相对应的函数进行处理,...

C++哪些运算符不能重载?
C++中绝大部分的运算符允许重载。不能重载的运算符只有5个:(1). (成员访问运算符)。(2).* (成员指针访问运算符)。(3)∷(域运算符)。(4)sizeof(长度运算符)。(5)?: (条件运算符)。

求助:c++C++ 运算符重载 的参数问题
&表示引用传递,相信你已经知道 const则表示传进来的参数不能被修改,由于这里是引用传递,参数修改后外面的值也会被修改,而这里只是重载+运算,并不希望参数被修改,所以为了安全,一般会定义成const类型

C++ 单目运算符的重载问题
这个问题很容易理解,假如一个正型变量int a = 5;对a进行自增运算,即a++,意思是把a的值+1后赋予a。这个重载中,返回这个对象本身就是返回自增后的这个变量。如果不返回(类型为void),你不能像平时那样另另外一个同类型的对象赋予该自增操作的结果。比如说你有两个time类型的对象t1、t2,则你...

相似回答