我尝试上课,在那里我可以创建学生的新对象。 我对类体(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;
};
答案 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
修复是在文件末尾添加换行符! : - )