类定义 - 两个文件

时间:2012-04-30 17:47:14

标签: c++ class char

我尝试上课,在那里我可以创建学生的新对象。 我对类体(student.cpp)和类(student.h)的定义有一些问题。

Error:

In file included from student.cpp:1:
student.h:21:7: warning: no newline at end of file
student.cpp:6: error: prototype for `Student::Student()' does not match any in class `Student'
student.h:6: error: candidates are: Student::Student(const Student&)
student.h:8: error:                 Student::Student(char*, char*, char*, char*, int, int, bool)

student.cpp

 //body definition  
    #include "student.h"
    #include <iostream>

    Student::Student()
    {
    m_imie = "0";
    m_nazwisko = "0";
    m_pesel = "0";
    m_indeks = "0";
    m_wiek = 0;
    m_semestr = 0;
    m_plec = false;

}

student.h

//class definition without body

#include <string.h>

class Student {
    //konstruktor domyslny
    Student (char* imie, char* nazwisko, char* pesel, char* indeks, int wiek, int semestr, bool plec): 
    m_imie(imie), m_nazwisko(nazwisko), m_pesel(pesel), m_indeks(indeks), m_wiek(wiek), m_semestr(semestr), m_plec(plec)
    {}  
        private:
        char* m_imie;
        char* m_nazwisko;
        char* m_pesel;
        char* m_indeks;
        int m_wiek;
        int m_semestr;
        bool m_plec;
};

3 个答案:

答案 0 :(得分:2)

cpp文件中的构造函数与标头中的构造函数不匹配。 cpp中的每个构造函数/析构函数/方法实现都应首先在头文件中的类中定义。

如果你想拥有2个构造函数 - 一个没有参数,一个有很多参数。您需要在标题中添加构造函数的定义。

//class definition without body

#include <string.h>

class Student {
    //konstruktor domyslny
    Student (char* imie, char* nazwisko, char* pesel, char* indeks, int wiek, int semestr, bool plec): 
    m_imie(imie), m_nazwisko(nazwisko), m_pesel(pesel), m_indeks(indeks), m_wiek(wiek), m_semestr(semestr), m_plec(plec)
    {}  //here really implementation made

    Student();  //one more constructor without impementation

        private:
        char* m_imie;
        char* m_nazwisko;
        char* m_pesel;
        char* m_indeks;
        int m_wiek;
        int m_semestr;
        bool m_plec;
};

答案 1 :(得分:1)

在您的头文件中,您声明Student只有一个包含所有已编写参数但没有默认Student()构造函数的构造函数,您应将其添加到标题中:

class Student {
  Student();
  Student(char* imie, char* nazwisko ... ) {}
};

答案 2 :(得分:0)

您为不带任何参数的Student构造函数编写了一个实体:

Student::Student( /* NO PARAMETERS */ )

但是这个函数Student()不在类定义中 这会产生错误:

 prototype for `Student::Student()' does not match any in class `Student'

你需要写:

class Student {
    public:
        Student();  /* NOW it is declared as well as defined */
    [... all the other stuff ...]
}; 

现在,Student()Student(/* 7 parameters */)

都有原型

另一个错误的修复很简单:

student.h:21:7: warning: no newline at end of file 

修复是在文件末尾添加换行符! : - )