0

メイン関数から未定義の参照エラーが発生しましたが、問題が見つかりません。私のファイルは次のとおりです。

//Student.h
#ifndef STUDENT_H
#define STUDENT_H
#include <vector>
#include <string>

class Student{
public:
 Student(std::string &line);
...
virtual void evaluateValue(){}
 virtual ~Student(){}
....
};
#endif

//HeStudent.h
#ifndef HESTUDENT_H
#define HESTUDENT_H
#include "Student.h"

class HeStudent : public Student{
public:
 HeStudent(std::string line) : Student(line){
  ...
 }

 static int AgradesCount;
 static double Aaverage;

 virtual void evaluateValue();
 virtual ~HeStudent(){}

};
#endif

.h ファイルごとに、彼の .cpp ファイルがあります。メインを含む main.cpp ファイルも取得し、メインで作成します。必要かどうかはわかりませんが、Student.h と HeStudent.h を含めたところ、長いエラーが発生し、次のように表示されました。

HeStudent::HeStudent(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)]+0x22): undefined reference to `Student::Student

誰が私に何が問題なのか教えてもらえますか?

4

4 に答える 4

2

推測: クラスHeStudentのコンストラクターは、基本クラスのコンストラクターを呼び出しますStudent

class HeStudent : public Student{
public:
 HeStudent(std::string line) : Student(line){
 //                          ^^^^^^^^^^^^^^^
 //                          call to ctor of base class
 ...

ただし、少なくともあなたが示したコードでは、その基本コンストラクターは実際には定義されていません。

class Student{
public:
 Student(std::string &line);
 ...                    // ^
                        // do you have a definition of the ctor's body somewhere?

この行の末尾にあるセミコロンに注意してください。コンストラクターの本体を別の場所で定義しましたか、それとも欠落していますか? 後者の場合、それがコンパイル エラーを説明している可能性があります。


更新:別の推測。

class Student{
public:
 Student(std::string &line);
 ...            //   ^
                // could this cause the problem?
于 2010-09-12T13:42:40.123 に答える
2

main.cpp だけでなく、各 .cpp ファイルをコンパイルしていますか? そうでない場合は、リンカーの問題です。

g++ -c main.cpp
g++ -c student.cpp
g++ -c hestudent.cpp 
g++ main.o student.o hestudent.o
于 2010-09-12T13:43:07.140 に答える
2

コンストラクターの定義をどこに置いていますか:

Student(std::string &line);

私はそれを見ません、そしてそれが欠けているなら、それはあなたが抱えている少なくとも1つの問題です. {}それらを定義している他の各宣言の後にあることに気付くでしょう。コンストラクターにはそのような中括弧がないため、コンストラクターを別の場所で定義する必要があります。(おそらく Student.cpp ファイルにあります)

Student.cpp ファイルが表示されていないため、定義されていると思われるかもしれませんが、定義されていません。Student(std::string &line)次のように定義されていることを確認してください。

Student::Student(std::string &line)
{
   // Any specific code you need here
}
于 2010-09-12T13:44:02.147 に答える
2

さて、Student.cpp ファイルでコンストラクターをインライン化するという問題が見つかりました。インラインを追加するときにコンストラクターの署名を変更しましたか? なぜ私の問題を解決するのですか?

于 2010-09-12T13:53:22.373 に答える