0

C++ 言語でポリモーフィズムを実行しようとしています。私の親クラスは Person で、Student という派生クラスがあります。ここに私の Person.h と .cpp があります:

class Person
{
public:
Person(string name);
virtual void display() const;
string get_name() const;
void set_name(string name);
string get_birthDay() const;
void set_birthDay(string birthDay);
private:
string name;
string birthDay;
};

.cpp:

Person::Person(string name)
{
this->name = name;
}

string Person::get_name() const
{
return name;
}

void Person::set_name(string name)
{
this->name = name;
}

string Person::get_birthDay() const
{
return birthDay;
}

void Person::set_birthDay(string birthDay)
{
this->birthDay = birthDay;
}

void Person::display() const
{
cout << get_name() << " " << get_birthDay() << endl;
}

そして、これは私の Student.h と .cpp です:

class Student : public Person
{
public:
Student(string name, string major);
virtual void display() const;
string get_major() const;
void set_major(string major);
private:
string major;
};

.cpp:

Student::Student(string name, string major)
:Person(name)
{
this->major = major;
}

string Student::get_major() const
{
return major;
}

void Student::set_major(string major)
{
this->major = major;
}

void Student::display() const
{
cout << get_name() << " " << get_major() << endl;
}

私の主な方法まで、すべてが完全に機能しています。これが私の主な方法です:

int main()
{
vector <Person*> person_list;
person_list.push_back(Student("Student","IT"));
person_list.push_back(Instructor("Instrructor", 2500));

for(int count=0; count< person_list.size(); count++)
{
    cout << person_list[count]->display() << endl;
}

system("Pause");
return 0;
}

push_back と cout でエラーが発生しました。ベクトルへの push_back のエラー メッセージは次のとおりです。オーバーロードされた関数のインスタンスが引数リストと一致しません。cout に関しては、オペランドに一致する演算子はありません。理由がわかりません。誰でも私がそれを修正するのを助けることができますか?

前もって感謝します。

4

3 に答える 3

0
cout << person_list[count]->display() << endl;

display()関数は戻りvoid型です。それを出力することはできません。

:についてはpush_back、他の人が言ったように、ポインターのベクトルを持っている場合は、オブジェクトではなくポインターを push_back する必要があります。

于 2013-07-05T11:05:30.217 に答える