使用复制构造函数时出错

时间:2015-03-03 19:10:42

标签: c++ copy-constructor

我写了这段代码 - 在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;
 }

2 个答案:

答案 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说。