1

継承のあるクラスを使用しています。私の学生。hを単独で呼び出すと完全に機能しますが、基本クラスとして使用すると、次のエラーが発生します。

/tmp/ccSCMNjf.o:umain.cpp:function main: error: undefined reference to 'student::showStudent()'
/tmp/ccSCMNjf.o:umain.cpp:function main: error: undefined reference to 'student::showStudent()'
/tmp/ccSCMNjf.o:umain.cpp:function main: error: undefined reference to 'student::showStudent()'
/tmp/ccSCMNjf.o:umain.cpp:function main: error: undefined reference to 'student::showStudent()'
/tmp/ccl9pOYI.o:underGradImp.cpp:function underGrad::underGrad(std::basic_string<char,     std::char_traits<char>, std::allocator<char> >, std::basic_string<char,     std::char_traits<char>, std::allocator<char> >, std::basic_string<char,  std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, double, double, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, sStat): error: undefined reference to 'student::student(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> , std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, double, double)'
collect2: ld returned 1 exit status

ヘッダーガードを使用していますが、#pragmaを1回使用しても、同じ結果になりました。

ヘッダーガードを外すと、次のエラーが発生します。

In file inlcluded from underGrad.h:160,
                  from umain.cpp:9:
student.h:19:7: error: redefinition of  'class student'
student.h:19:7  previous definition of 'class student'

これがstudent.hファイルです

#ifndef H_student
#define H_student

#include <iostream>
#include <string>


using namespace std;

class student 
{

public:

  student(string = "", string = "", string = "", string = "", double = 0.0, double = 0.0, double = 0.0);

  string getLastName() const;

  string getFirstName() const;

  string getID() const;

  void getCharges(double&, double&) const;

  double getBalance() const;

  string getMajor() const;

  double getGPA() const;

  void setName(string, string);

  void setID(string);

  void setMajor(string);

  void setCharges(double, double);

  void setGPA(double);

  void showStudent();

private:

  bool checkID(string) const;

  string expandMajorCode(string);

  string lastName, firstName, studentID, major;

  double gpa, charges, financialAid, balance;

  static const double MAX_CHARGES = 10000.0;

  static const double MAX_GPA = 4.0;

};

#endif

これが、student.hを基本クラスとして使用しているunderGrad.hファイルです。


#ifndef H_underGrad
#define H_underGrad

#include <iostream>
#include <string>

#include "student.h"


using namespace std;

enum sStat {PROBATION, GOOD, SPECIAL, NONE};

class underGrad : public student {

public:
  underGrad(string = "", string = "", string = "", string = "", double = 0.0, double =         0.0, double = 0.0, string = "", sStat  = NONE);
  string getAdvisor() const;
  sStat getStatus() const;
  void setAdvisor(string);
  void setStatus(sStat);
  void showStudent();

private:
  string advisor;
  sStat sStatus;

};

#endif

また、students.hとunderGradsを含むメインもあります。hしかし、それらの呼び出しを除いて、それは重要ではありません。学生を含めました。hは実装ファイルにあり、完全に機能するので、2番目のクラスの定義に問題があるか、インクルードに何らかの問題があると考えています。誰かが私を正しい方向に向けることができますか?

NOTE:
The errors are produced for every member of student - not just showStudent

どんな助けでも大歓迎です

4

1 に答える 1

2
  1. インクルードガードを保持します。
  2. studentstudent.cpp?)を実装するファイルを実行可能ファイルにリンクしてください。
于 2013-02-19T06:28:41.637 に答える