3

私の親クラスであるCourseには、メソッドaddStudent(Student s)があります。私の子クラスであるBetterCourseは、Courseを継承しています。BetterCourse.addStudent(s)を実行しようとするたびに、次のエラーが発生します。

エラー:「BetterCourse :: addStudent(Student(&)())」の呼び出しに一致する関数がありません注:候補は次のとおりです:void Course :: addStudent(Student)

addStudent()がBetterCourseで定義されていないことを示しており、親クラスであるCourseに存在するものを使用することをお勧めしていることを理解しています。継承に関する全体的な考え方は、継承された関数や変数を再定義する必要がないため、これは私を混乱させました。

コースは次のとおりです。

#include <iostream>
#include <string>
#include "Student.h"

using namespace std;

class Course
{

    protected:
        string id;
        string name;

    public:
        Course();
        Course(string id, string name);     
        void addStudent(Student s);
};

Course::Course()
{
   //code
}

Course::Course(string id, string name)
{
   //code
}

void Course::addStudent(Student s) 
{
   //code
}

BetterCourse:

#include <iostream>
#include <string>
#include "Course.h"

using namespace std;

class BetterCourse : public Course
{
    public:
        BetterCourse(string id, string name) : Course(id,name){};
};
4

3 に答える 3

4

あなたのエラーから、あなたは初めてC++の最も醜い部分にたどり着いたようです。

これ:

Student s();

関数宣言です-オブジェクト定義ではありません。電話をかけるときsのタイプはそうです:Student (*)()

BetterCourse bc; 
bc.addStudent(s);

エラーが発生します-Studentを返す関数を追加するメソッドがありません。

次の方法でStudentを定義します。

Student s;
Student s {}; // new C++11 way
Student s = Student(); // 
于 2012-10-13T23:41:00.323 に答える
0

不適切な引数を使用して関数'addStudent'を実際に呼び出しているようです。BetterCourseオブジェクトで実際にaddStudentを呼び出しているコードを表示できますか?学生オブジェクト自体ではなく、学生への参照を使用しているようです。

于 2012-10-13T23:35:13.147 に答える
0

BetterCourse.addStudentを呼び出すことはできません。オブジェクトを作成する必要があります

BetterCourse obj;
obj.addStudent(s);

動作するはずです

addStudent(s)を静的メソッドとして宣言するよりもBetterCourse :: addStudent(s)を呼び出したい場合

于 2012-10-13T23:37:31.980 に答える