我写了这段代码 - 在dev-cpp -about类的时间。我在这个程序中使用了copy-constructor,但是我收到了这个错误:" [错误]'时间t2'此前在此宣布" 原因是什么?我该怎么办?
#include<iostream>
using namespace std;
class Time{
public:
int hour;
int min;
int sec;
Time(int h,int m, int s){
this->hour=h;
this->min=m;
this->sec=s;
}
Time(Time *t){
t->hour=this->hour;
t->sec=this->sec;
}
};
void print(Time *t){
cout<<t->hour<<':'<<t->min<<':'<<t->sec<<endl;
}
int main(){
Time t1(6,18,25);
Time t2(11,45,13);
Time(&t2);
print(&t1);
cout<<endl;
print(&t2);
return 0;
}
答案 0 :(得分:0)
在构造函数中重载
Time(Time *t){
t->hour=this->hour;
t->sec=this->sec;
}
您可能放错了this
vs t
,因为您显然希望将传递的对象中的数据复制到新创建的对象中,而不是像现在这样反过来。
此外,此处缺少会员min
。
Time(Time *t){
this->hour=t->hour;
this->min=t->min;
this->sec=t->sec;
}
然后,要使用此构造函数,您需要为新对象指定名称。变化
Time(&t2);
到
Time t3(&t2);
这就是说,您可以使用赋值或复制构造简单地复制类对象。将自动为您创建适当的复制构造函数和赋值运算符。您只需编写Time t3 = t2;
或Time t3(t2);
并删除上述构造函数。
答案 1 :(得分:0)
在main()函数中,您需要命名第三个Time变量。
Time(&t2);
应该是
Time t3(&t2);
另外,@leemes说。