我在创建数组并将对象添加到数组时遇到问题 这是我的基类:
class CPerson
{
std::string first_name;
std::string last_name;
int birth_year;
char sex;
public:
CPerson();
CPerson(std::string, std::string,int,char);
有一些额外的制定者和吸气剂。然后我有这个派生类:
class CData :
public CPerson
{
int nrOfPersons;
CPerson *Data_array;
public:
CData(int);
~CData();
};
在构造函数中,我想用person对象填充Data_array,并执行以下操作:
CData::CData(int x) : nrOfPersons(x)
{
for (int i = 0; i < nrOfPersons; i++)
Data_array[i] = CPerson();
}
但它在那里中途崩溃了。每当我使用它时,我都会将默认的CPerson()
构造函数设为cout
一条消息“已插入”。因此,如果我在主CData database(4)
中打电话,它应该在屏幕上打印“插入”4次。相反,它只打印2次然后崩溃。
答案 0 :(得分:3)
您正尝试使用指向CPerson
的指针作为数组。如果你在构造时动态分配了一个数组,那将是真的,但是这并不是你真正想要处理的麻烦。
值得庆幸的是,C ++标准创建了一个名为std::vector
的非常有用的实用程序,您可以使用它:
class CData : public CPerson
{
std::vector<CPerson> Data_array;
// ...
};
然后:
CData::CData(int n)
: Data_array(n)
{}
最美妙的是,你的nrOfPersons
成员对象也神奇地消失了。要检索尺寸,您只需拨打Data_array.size()
并发送电子邮件。
答案 1 :(得分:-1)
您需要为Data_array
分配内存:
CData::CData(int x) : nrOfPersons(x)
{
// allocate memory
Data_array = new CPerson[nrOfPersons];
// fill array
for (int i = 0; i < nrOfPersons; i++)
Data_array[i] = CPerson();
}
不要忘记之后删除分配的数组(例如在析构函数中):
delete[] Data_array