【发布时间】:2021-04-04 11:26:40
【问题描述】:
首先,感谢您的帮助。 我一直在学习C,最近才开始学习C++。
我正在尝试找出新的面向对象的概念。
例如,
class Contact{
private:
char name[30];
char birthday[10];
char email[30];
char phone[20];
public:
char* getname();
char* getbirthday();
char* getemail();
char* getphone();
void setname(char* x);
void setbirthday(char* y);
void setemail(char* z);
void setphone(char* w);
};
class ContactArray
{
private:
friend class contactArray;
int max_size;
Contact **contact1;
public:
friend class contactArray;
ContactArray(int num)
{
int i;
max_size = num;
contact1 = new Contact*[max_size];
for(i = 0; i <max_size ;i++)
{
contact1[i] = new Contact();
}
}
};
这是我现在正在使用的类,但是如果我尝试访问“char name[30]”,我的程序将在使用“getname()”函数的地方停止。简而言之,
ContactArray *contactArray;
contactArray = new ContactArray(6);
如果我创建这样的实例,那么如果我创建名为 read_data 的 ContactArray 的公共方法,
void ContactArray::read_data(char* filename)
{
.........
....
fgets(str, BUFSIZE,fp);
ptr = strtok(str,";")
contact1[i]->setname(ptr);
printf("%s", contact1[i]->getname());//program stops here-----> here
}
如果我尝试通过 getname() 检查“setname(ptr)”是否正常工作,它会停止,所以我无法检查。 读取文件或标记化等其他事情工作正常,因为我可以检查它们 我使用基于 C 的函数表示歉意,我仍在学习 C++ 但请忽略它们。
我认为这与内存分配有关,但不太清楚为什么。 帮帮我
char* Contact::getname()
{
char* n;
strcpy(n,name);
return n;
}
这是getter函数
【问题讨论】:
-
尝试将
contact1[i]->getname(ptr)更改为contact1[i]->getname()。 -
这不应该“停止”。这甚至应该拒绝编译。您没有带参数的 getname 函数。将来,如果您可以将实际的错误消息复制粘贴到您的问题中,它将帮助人们回答。
-
哦,这是一个错字,它应该是 getname() 而不是 getname(ptr)。我的坏
-
只是我没有提到getname的定义。我有它我会编辑它一秒钟