[英]Exception thrown
我正在做一個項目,我是初學者。 該項目涉及人、成人、兒童和轉向架 class。 在轉向架adultcount
中,我將名為成人的類型指針初始化為adult = new Adult [adultcount]
,其中成人計數是用戶想要添加的成人人數。
當我在輸入中只添加一個成年人時,它工作正常,它接受輸入並在 for 循環中分配值時分配它。
但是當我添加多個時,它會停止工作並在Adults[i].setdata()
行拋出異常。
#include<iostream>
#include<string>
using namespace std;
class Person {
public:
string Name;
int Age;
string Gender;
public:
Person()
{
Name = '\0';
Age = 0;
Gender = '\0';
}
Person(string Name, int Age, string Gender)
{
this->Name = Name;
this->Age = Age;
this->Gender = Gender;
}
virtual void setdata()
{
string name, gender;
int age;
cin.ignore();
cout << " enter Name :";
getline(cin, name, '\n');
this->Name = name;
cout << endl;
cout << " Enter gender ";
getline(cin, gender, '\n');
this->Gender = gender;
cout << endl;
cout << " Enter age ";
cin >> age;
Age = age;
cout << endl;
}
virtual void printinfo()
{
cout << " name " <<Name;
cout << " Gender " << Gender;
cout << " age : " << Age;
}
};
class Adult :public Person {
public:
string Occupation;
string Qualification;
string NIC;
Adult():Person()
{
Occupation = '\0';
Qualification = '\0';
NIC = '\0';
}
Adult(string Occupation, string Qualification, string NIC, string Name, int Age, string Gender) : Person(Name, Age, Gender)
{
this->Occupation = Occupation;
this->NIC = NIC;
this->Qualification = Qualification;
}
void setdata()
{
Person::setdata();
string occupation, qualification/*, name, gender,*/ ,cnic;
/* int age;*/
cin.ignore();
/* cout << " enter Name :" ;
getline(cin, name, '\n');
this->Name = name;
cout << endl;*/
cout << "enter occupation ";
getline(cin, occupation, '\n');
this->Occupation = occupation;
cout << endl;
/*cout << " Enter gender ";
getline(cin, gender, '\n');
this->Gender = gender;
cout << endl;*/
cout << " enter qualification ";
getline(cin, qualification, '\n');
this->Qualification = qualification;
cout << endl;
cout << " Enter cnic ";
getline(cin, cnic, '\n');
this->NIC = cnic;
cout << endl;
/* cout << " Enter age ";
cin >> age;
this->Age = age;
cout << endl;*/
}
void printinfo()
{
Person::printinfo();
/*cout << " name "<<Name << endl;*/
cout << " occupation " << Occupation << endl;
/*cout << " Gender " << Gender << endl;*/
cout << " Qualifcation " << Qualification << endl;
/*cout << " Age " << Age << endl;
cout << " Gender " << Gender << endl;*/
}
};
class kid :public Person {
public:
string B_form_number;
kid() : Person()
{
B_form_number = '\0';
}
kid(string B_form_number, string Name, int Age, string Gender) :Person(Name, Age, Gender)
{
this->B_form_number = B_form_number;
}
void setdata()
{
Person::setdata();
string bform;
cout << " Enter B Form number ";
/* getline(cin, bform, '\n')*/;
cin >> bform;
this->B_form_number = bform;
cout << endl;
}
void setbform()
{
string bform;
cout << " Enter B Form number ";
getline(cin, bform, '\n');
this->B_form_number = bform;
cout << endl;
}
void printinfo()
{
Person::printinfo();
cout << " b form number " << B_form_number;
}
};
class Bogie /*:public kid*/ {
int Bogie_ID;
Bogie* next;
Person* Adults;
Person* kids;
string familyName;
int adultcount;
int kidcount;
public:
Bogie(int id)
{
Bogie_ID = id;
next = nullptr;
Adults = nullptr;
kids = nullptr;
familyName = '\0';
adultcount = 0;
kidcount = 0;
}
void AddPassengers() // should add adults and kids information etc
{
string familyName;
cout << "Enter family name " << endl;
cin.ignore();
getline(cin, familyName, '\n');
this->familyName = familyName;
bool condition = false;
bool condition2 = false;
while (condition == false) // runs until valid input for adults
{
cout << " How many adults in the family " << endl;
cin >> adultcount;
if (adultcount >= 1 && adultcount <= 4)
{
condition = true;
}
else
{
cout << " Invalid input " << endl;
cout << " We have seats for 4 adults " << endl;
condition = false;
}
}
while (condition2 == false) //runs until valid input for kids
{
cout << " How many kids in the family " << endl;
cin >> kidcount;
if (kidcount >= 1 && kidcount <= 6)
{
condition2 = true;
}
else
{
cout << " Invalid input " << endl;
cout << " We have seats for 6 kids " << endl;
condition2 = false;
}
}
this->Adults = new Adult[adultcount];
for (int i = 0; i < adultcount; i++)
{
Adults[i].setdata();
}
}
}
};
int main()
{
Bogie a(1);
a.AddPassengers();
a.Print();
}
我相信您需要將Adults
從Person *
更改為Adult *
。
當程序嘗試訪問Adults[1]
時
for (int i = 0; i < adultcount; i++)
{
Adults[i].setdata();
}
它在數組中跳到sizeof(Person)
前面,而數組中的對象是sizeof(Adult)
,這會導致您看到的異常。
所以我找到了合適的方法,即在成員中將名為成人和兒童的指針聲明為 Person ** Adults; Person **kids 然后是成年人 = new Person * [adultcount];
for (int i = 0; i < adultcount; i++)
{
adults[i] = new Adult;
adults[i]->setdata();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.