"C2259: '<クラス名>': 抽象クラスをインスタンス化できません。" に関する原因と対処

このコンパイルエラーの原因と対処に関して説明します。

スポンサード リンク

Microsoft Visual C++にて以下のソースでコンパイルエラーが発生します:

コンパイルエラーメッセージ:
C2259: '<クラス名>': 抽象クラスをインスタンス化できません。<ソース名>: note: 次のメンバーが原因です:<ソース名>: note: '<クラス名>::<関数名>': は抽象型です<ソース名>: note: '<クラス名>::<関数名>' の宣言を確認してください

ソース(バグ有り):

#include <iostream>
#include <string>
using namespace std;
class CVehicle{ public:
virtual void move()=0; }; class CCar : public CVehicle {
public: }; class CPlane : public CVehicle {
public:
void move()
{ cout << "a plane flies." << endl; } }; int main() {
CCar mycar;
CPlane myplane;
mycar.move();
myplane.move();
return 0; }


原因:
純粋仮想関数(move())を持つクラス(CVehicle)に対して、派生クラス(CCar)が純粋仮想関数をオーバーライドしていません。

抽象クラスは関数が定義されていないため、オブジェクトは作成出来ません。

対処:
派生クラス(CCar)で純粋仮想関数をオーバーライドする関数を定義します。


ソース(修正済み):

#include <iostream>
#include <string>
using namespace std;
class CVehicle{ public:
virtual void move()=0; }; class CCar : public CVehicle {
public:
void move()
{ cout << "a car runs." << endl; } }; class CPlane : public CVehicle {
public:
void move()
{ cout << "a plane flies." << endl; } }; int main() {
CCar mycar;
CPlane myplane;
mycar.move();
myplane.move();
return 0; }

スポンサード リンク



[コンパイルエラーコード、メッセージに戻る]