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

3 に答える 3

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;
};
于 2012-04-30T17:54:09.357 に答える
1

ヘッダーファイルStudentで、記述されたすべてのパラメーターを持つコンストラクターが1つだけで、デフォルトのStudent()コンストラクターがないことを宣言します。これをヘッダーに追加する必要があります。

class Student {
  Student();
  Student(char* imie, char* nazwisko ... ) {}
};
于 2012-04-30T17:49:53.260 に答える
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 

修正は、ファイルの最後に改行を入れることです!:-)

于 2012-04-30T17:49:15.087 に答える