D:\Qt\Qt5.2.1\Tools\QtCreator\bin\day5\main.cpp:58: error: constructor delegation follows mem-initializer for 'Student' Collage(string name,int number,string gender,int age,string major,int score):Student(name,number,gender,age),Collage(major,score){} ^
时间: 2024-02-14 20:08:00 浏览: 23
这个错误是因为你在定义 `Collage` 类的构造函数时,使用了成员初始化列表(`Collage(major,score)`),但在这之后又使用了构造函数委托(`Student(name,number,gender,age)`)。按照 C++ 的规定,委托构造函数必须写在成员初始化列表的最前面,因此你需要调整一下代码,把委托构造函数移到成员初始化列表的最前面,就像这样:
```
Collage(string name,int number,string gender,int age,string major,int score):Student(name,number,gender,age), Collage(major,score) {}
```
注意,这里的 `Student` 是指 `Student` 类的构造函数,`Collage` 是指 `Collage` 类的构造函数,它们之间用逗号分隔。另外,如果 `Collage` 类是继承自 `Student` 类的,那么委托构造函数的写法应该是这样的:
```
Collage(string name,int number,string gender,int age,string major,int score): Student(name,number,gender,age), CollageBase(major,score) {}
```
其中 `CollageBase` 是 `Collage` 类的父类,你需要将其替换为实际的父类名称。
相关问题
D:\Qt\Qt5.2.1\Tools\QtCreator\bin\day5\main.cpp:53: error: no matching function for call to 'Student::Student()' Collage(string j,double s):major(j),score(s){} ^
这个错误是因为你在创建一个类的对象时,编译器默认会调用该类的默认构造函数,但是你的类中没有默认构造函数,而你又没有在创建对象时提供构造函数所需的参数。解决这个问题的方法是,在类中添加一个默认构造函数,或者在创建对象时提供构造函数所需的参数。如果你不需要默认构造函数,那么可以显式删除它,如下所示:
```
class Student {
public:
Student() = delete; // 显式删除默认构造函数
Student(string n, int a):name(n),age(a){}
Collage(string j,double s):major(j),score(s){}
private:
string name;
int age;
string major;
double score;
};
```
D:\Qt\Qt5.2.1\Tools\QtCreator\bin\day5\main.cpp:139: error: ISO C++ forbids declaration of 'Student' with no type [-fpermissive] Student(string n,int m):mentor_name(n),wages(m){} ^
这个错误的含义是:在main.cpp文件的第139行,声明了一个名为Student的变量或函数,但是没有指定其类型。这可能是因为在使用Student之前没有正确地包含它的头文件或类定义。解决方法是确保在使用Student之前正确地包含它的头文件或类定义,并且在类定义中指定Student的类型。另外,编译器可能会提示你添加“-fpermissive”标志来允许这种类型的声明,但这并不是推荐的解决方法,因为它可能会导致其他问题。