2012-04-30 66 views
1

我嘗試創建班級,在那裏我可以創建學生的新對象。 我有類定義體(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

你寫的學生構造一個機構,不帶任何參數:

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 

解決的辦法是在文件末尾添加換行符! :-)

+1

您錯過了他在多參數構造函數的頭文件中擁有'{}'。因此,一個*有*定義,而cpp中的no參數在頭文件中沒有匹配的聲明。 – crashmstr

+0

現在我明白我的錯誤了。現在一切正常。 – mathewM

1

在你頭文件,你聲明Student只有一個構造函數的所有書面參數,但沒有默認構造函數Student(),你應該把它添加到標題:

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

你在CPP文件的構造不不匹配頭中的構造函數。 cpp中的每個構造函數/析構函數/方法實現都應該首先在頭文件的類中定義。

如果你想有2個構造函數 - 1沒有參數,1有很多參數。您需要在標題中添加構造函數的定義。

//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; 
};