C ++编译问题

时间:2016-02-09 20:19:28

标签: c++

使用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()

我无法弄清问题在哪里......

1 个答案:

答案 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];
}