我有一个班级:
class Kunde{
char *name;
char *ort;
int *alter;
double umsatz;
int transaktion;
int id=0;
int dummyAlter=20;
public:
static int anzahl;
Kunde(char* n=(char*)"Max Maier", char* o=(char*)"Köln", int *a=&dummyAlter);
Kunde(const Kunde &k);
~Kunde();
void buy(double u);
static int getAnzahl();
};
在我的.cpp文件中我有:
Kunde::Kunde(char* n, char* o, int *a)
{
name=n;
ort=o;
alter=a;
id=anzahl++;
umsatz=0;
transaktion=0;
};
我想写一个复制构造函数。
这是通过以下方式实现的:
Kunde::Kunde(const Kunde &k)
{
int lenname=(int)strlen(k.name)+1;
name=new char[lenname];
memcpy(name, k.name, lenname);
int lenort=(int)strlen(k.ort)+1;
ort=new char[lenort];
memcpy(ort, k.ort, lenort);
alter=new int;
memcpy(alter, k.alter, sizeof(int));
id=k.id;
anzahl++;
umsatz=k.umsatz;
transaktion=k.transaktion;
}
代码编译得很好但是当我执行它时会产生错误,我使用memcpy将数据从k.alter复制到alter。
你知道有什么不对吗?我试过stfw和rtfm,但似乎我太傻了,找不到任何关于"纯粹" int *'而不是int * -Arrays。感谢您的时间。
答案 0 :(得分:3)
关于整数指针的问题,你的问题是双重的:首先你在构造函数中有一个默认参数,它是指向地址 20
的指针,而不是指向值 20
。第二个问题是你在memcpy
调用中使用address-of运算符,它将为你提供指针的地址,即你有一个int **
类型的表达式
答案 1 :(得分:1)
经过你们的一些提示,我终于找到了问题。
char*
(你在构造函数中看到这个),只有这样才能实现我的字符串指针。<强>解决方案:强>
Kunde::Kunde(char* n, char* o, int a)
{
int lenname=(int)strlen(n)+1;
name=new char[lenname];
memcpy(name, n, lenname);
int lenort=(int)strlen(o)+1;
ort=new char[lenort];
memcpy(ort, o, lenort);
alter=new int;
*alter=a;
id=anzahl++;
umsatz=0;
transaktion=0;
}
int*
作为构造函数的参数,a)没有意义,b)是皇家PITA。修改参数后,我使用了@ Matthias247提出的构造来复制int数据。<强>解决方案:强>
Kunde::Kunde(const Kunde &k)
{
int lenname=(int)strlen(k.name)+1;
name=new char[lenname];
memcpy(name, k.name, lenname);
int lenort=(int)strlen(k.ort)+1;
ort=new char[lenort];
memcpy(ort, k.ort, lenort);
alter=new int;
*alter = *(k.alter);
id=k.id;
anzahl++;
umsatz=k.umsatz;
transaktion=k.transaktion;
}