如何从另一个成员变量是第一个类实例的类访问私有成员变量



首先,感谢您的帮助。我一直在学习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();
}

}
};

这是我现在正在使用的类,但如果我尝试访问";字符名称[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
}

如果我试图检查;setname(ptr(";通过getname((运行良好,它停止了,所以我无法检查。其他事情,如读取文件或标记化,运行良好,因为我可以检查它们我的道歉使用了基于C的函数,我仍在学习C++,但请忽略它们。

我认为这与内存分配有关,但不太清楚为什么。帮助我


char* Contact::getname()
{
char* n;
strcpy(n,name);

return n;
}

这是吸气函数

;n〃;将Contact::getname((函数中的指针传递给strcpy((时,该指针未初始化。这意味着strcpy((将尝试将字符串复制到";n〃;执行时的指针(该地址可能是任何东西,因为变量没有初始化,很可能会导致崩溃(。您应该在strcpy((之前使用n = new char[30];分配新内存。

更好的是,您应该使用strncpy()函数,否则如果";name";字符串不是以null结尾的(这里也可能发生这种情况(。

既然你提到你正在从C学习C++混合,我建议你研究一下std::string类,它为你处理了几乎所有的内存管理麻烦。

最新更新