【发布时间】:2023-03-23 17:15:01
【问题描述】:
以下代码在继承方面有什么问题?出现no matching function for call to ‘student::student()’ 错误。
class student {
private:
string firstname;
string lastname;
public:
student(string fname, string lname) {
firstname = fname;
lastname = lname;
}
string getname() { return firstname + lastname; }
void setfirstname(string fname) { this->firstname = fname; }
};
class undergraduate : public student {
private:
double gpa;
student* stu;
public:
undergraduate(string firstname, string lastname, double gpa) {
stu = new student(firstname, lastname);
this->gpa = gpa;
}
};
int main() {
undergraduate stu1("Sam", "Singh", 4.0);
stu1.setfirstname("temp");
cout << stu1.getname();
}
请指出错误并帮助我纠正它。谢谢!
【问题讨论】:
-
您应该像这样称呼学生 ctor:
undergraduate(string firstname, string lastname, double gpa) : student(firstname, lastname), gpa(gpa) { }并失去student* stu;似乎您不了解继承。 -
基类构造函数总是在派生类构造函数中调用。每当您创建派生类对象时。由于您没有默认 ctor,Johnny 的评论说明了如何使用 2 个参数调用您的 ctor。
-
@JohnnyMopp 我正在学习。
-
我的意思不是侮辱。但也许你应该回去重新阅读关于继承的章节。另见:What are the rules for calling the base class constructor?
-
@JohnnyMopp 我从未感到受到侮辱。我只是说我正在学习,详细的答案对我的帮助不仅仅是捷径!
标签: c++ oop inheritance