我尝试将矢量comanda复制到矢量comenzi:
public :
Ospatar(char nume[30],Comanda * comanda,int nrcom,char sex,int varst)
{
strcpy(Nume,nume);
comenzi=new Comanda[sizeof(comanda)];
for(int i=0;i<sizeof(comanda);i++)
{
comenzi[i]=comanda[i];
}
cout<<endl;
nrComenzi=nrcom;
gen=sex;
varsta=varst;
}
这是来自Class Comanda的重载运算符:
Comanda& operator=(Comanda c)
{
Prod.set_denProd(c.Prod.get_denProd());
Num=c.Num;
nrPortii=c.nrPortii;
date.zi=c.date.zi;
date.luna=c.date.luna;
date.an=c.date.an;
}
矢量comanda的前两个元素很好地转移到矢量comenzi但在那之后我得到一些随机数...
答案 0 :(得分:0)
通常你应该使用std :: vertor - 这是在C ++中这样做的正确方法。但假设您不允许使用标准库:
首先你的Comanda :: operator =应该通过引用接受参数(最好是引用const):
Comanda& operator=(const Comanda& c)
然后,sizeof(comanda)返回指向Comanda的指针的大小,而不是数组中元素的数量。您通常必须在单独的参数中传递数组的大小(我猜nrcom
就是那个)。
所以:
comenzi = new Comanda[nrcom];
for (int i=0; i<nrcom; i++)
等...
你当然需要更多地清理代码(那些strcpy的东西),最后但并非最不重要的是不要忘记为你分配的数据添加delete []。