1. ホーム
  2. c++

[解決済み] クラス用vtable」コンストラクタへの未定義の参照 [重複]。

2022-02-01 01:59:55

質問

以下のヘッダーファイルをコンパイルする際に、`vtable for student' への未定義の参照が発生します。

student.h

class student
{
private:
    string names;
    string address;
    string type;

protected:
    float marks;
    int credits;

public:
    student();
    student(string n,string a,string t,float m);
    ~student();
    string getNames();
    string getAddress();
    string getType();
    float getMarks();
    virtual void calculateCredits();
    int getCredits();
};

student::student(){}

student::student(string n, string a,string t,float m)
{
    names = n;
    address = a;
    marks = m;
}

student::~student(){}

これのどこが悪いのかがわからない。

どうすればいいですか?

を宣言しています。 virtual 関数を定義していません。

virtual void calculateCredits();

定義するか、宣言するかのどちらかです。

virtual void calculateCredits() = 0;

あるいは単純に

virtual void calculateCredits() { };

vftableについてもっと読む。 http://en.wikipedia.org/wiki/Virtual_method_table