使用g ++ MainStudent.cpp Student.cpp
编译时这些是我得到的错误:
MainStudent.cpp:在函数'int main()'中:MainStudent.cpp:23:38: 错误:没有匹配函数来调用'Student :: Student(char [10], char [10],int&,double [3])'MainStudent.cpp:23:38:注意:候选人 是:Student.h:13:2:注意:学生::学生(char *,char *,int,double) Student.h:13:2:注意:参数4没有已知的转换 'double [3]'到'double'Student.h:5:7:注意:学生::学生(常数 Student&)Student.h:5:7:注意:候选人需要1个参数,4 提供Student.cpp:在构造函数'Student :: Student(char *,char *, int,double)':Student.cpp:9:11:错误:不兼容的类型 将'double'赋值给'double [3]'Student.cpp:在全球范围内: Student.cpp:14:5:错误:'int Student :: Getage()'的原型 不匹配任何班级'学生'学生.h:16:7:错误:候选人是: int * Student :: Getage()Student.cpp:15:8:错误:'double的原型 学生:: Getmarks()'与班级'学生'中的任何一个都不匹配 Student.h:17:10:错误:候选人是:double * Student :: Getmarks()
我无法弄清问题在哪里......
答案 0 :(得分:2)
你的构造函数是
Student::Student (char *fname, char *lname, int age, double marks)
^^^^^^^^^^^^
但是你试图在
中传递一个数组double marks[3];
//...
Student st1(fname, lname, age, marks);
你需要摆脱类中的数组,只需要取一个double或更改构造函数来获取一个double数组,然后在构造函数中复制它,如
Student::Student (char *fname, char *lname, int age, const double (&marks)[3]) {
// ^^^^^^^^^^^^^^^ use array of size 3
// since that is what _marks is
strcpy(_fname, fname);
strcpy(_lname, lname);
_age = age;
for (int i = 0; i < 3; i++)
_marks[i] = marks[i];
}