Почему моя строка не выводится, когда я вызываю функцию print ()?

Мои занятия extPersonType наследуется от 3 других классов. Программа компилируется без ошибок, но по какой-то причине строка relation а также phoneNumber не показывайся Вся остальная информация, которую я прошу, делает. Где моя проблема?

class extPersonType: public personType, public dateType, public addressType
{
public:
extPersonType(string relation = "", string phoneNumber = "", string address = "", string city = "", string state = "", int zipCode = 55555, string first = "", string last = "",
int month = 1, int day = 1, int year = 0001)
: addressType(address, city, state, zipCode),  personType(first, last), dateType (month, day, year)
{
}
void print() const;

private:
string relation;
string phoneNumber;
};

void extPersonType::print() const
{
cout << "Relationship: " << relation << endl;
cout << "Phone Number: " << phoneNumber << endl;
addressType::print();
personType::print();
dateType::printDate();
}/*******
MAIN PROGRAM
*******/

int main()
{
extPersonType my_home("Friend", "555-4567", "5142 Wyatt Road", "North Pole", "AK", 99705, "Jesse", "Alford", 5, 24, 1988);
my_home .extPersonType::print();
return 0;
}

0

Решение

Это потому, что вы их нигде не инициализируете

    extPersonType(string relation = "", string phoneNumber = "", string address = "", string city = "", string state = "", int zipCode = 55555, string first = "", string last = "", int month = 1, int day = 1, int year = 0001)
: relation (relation), phoneNumber (phoneNumber)// <<<<<<<<<<<< this is missing
addressType(address, city, state, zipCode),  personType(first, last), dateType (month, day, year)
{
}

Вы не должны забывать назначать / инициализировать ваши переменные в конструкторе

Кроме того, это рекомендация, но я не думаю, что наследование здесь необходимо. Вы должны использовать композицию.

class extPersonType
{
private:
string relation;
string phoneNumber;

addressType address;
personType person_name;
dateType date; // birthday ?
}
3

Другие решения

Вы должны назвать это как

my_home.print();

Вы, вероятно, смущены тем, как это объявлено:

void extPersonType::print(){ <..> }

Здесь extPersonType:: part просто сообщает компилятору, что funciton является частью класса. Когда вы вызываете функцию, вы уже вызываете ее для определенного объекта класса (в вашем случае my_home), поэтому вы не должны использовать имя класса.

1

Вы на самом деле не инициализируете переменные члена класса. Вам нужно сделать что-то вроде следующего, чтобы инициализировать relation а также phoneNumber Участники:

extPersonType(string relation = "", string phoneNumber = "", string address = "",
string city = "", string state = "", int zipCode = 55555, string first = "", string last = "",
int month = 1, int day = 1, int year = 0001)
: addressType(address, city, state, zipCode),  personType(first, last), dateType (month, day, year),
relation(relation), phoneNumber(phoneNumber)  // <== init mmebers
{
}

Я подозреваю, что вам может понадобиться сделать что-то подобное с addressType, personType, а также dateType конструкторы базового класса.

1
По вопросам рекламы [email protected]