使用复制构造函数时出错

Having error in using copy constructor

我在 dev-cpp 中写了这段代码 - 大约 class 的时间。我在这个程序中使用了复制构造函数,但我收到了这个错误:“[Error] 'Time t2' previously declared here” 这是什么原因,我该怎么办?

 #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;
 }

在你的构造函数重载中

     Time(Time *t){
         t->hour=this->hour;
         t->sec=this->sec;
     }

你可能放错了 thist,因为你显然想将数据从传递的对象复制到新创建的对象,而不是像你现在做的那样相反。

另外,min成员这里不见了。

     Time(Time *t){
         this->hour=t->hour;
         this->min=t->min;
         this->sec=t->sec;
     }

然后,要使用此构造函数,您需要为新对象命名。变化

Time(&t2);

进入

Time t3(&t2);

也就是说,您可以使用赋值或复制构造简单地复制 class 对象。自动为您创建适当的复制构造函数和赋值运算符。您可以简单地编写 Time t3 = t2;Time t3(t2); 并摆脱上面的构造函数。

在您的 main() 函数中,您需要命名第三个时间变量。

Time(&t2);

应该是

Time t3(&t2);

还有,@leemes 说的。