C++で「invalid abstract type~」というエラーになる場合の対処
C++で「invalid abstract type~」「because the following virtual functions are pure within~」というエラーになる場合の対処方法について紹介します。
1.問題点
下記のサンプルプログラムを作りました。
sample.h
class Sample {
public:
Sample();
void test1();
virtual void test2() = 0;
};
sample.cc
#include <stdio.h>
#include "sample.h"
Sample::Sample() {
}
void Sample::test1() {
printf("%s\n", "Hello World!");
}
void Sample::test2() {
}
test.cc
#include "sample.h"
Sample sample[10];
int main() {
sample[0].test1();
return 0;
}
このプログラムをコンパイルすると、下記の「invalid abstract type~」「because the following virtual functions are pure within~」というエラーに遭遇します。
% g++ test.cc sample.cc
test.cc:3:17: エラー: invalid abstract type 'Sample' for 'sample'
Sample sample[10];
^
In file included from test.cc:1:0:
sample.h:1:7: 備考: because the following virtual functions are pure within 'Sample':
class Sample {
^
sample.h:5:22: 備考: virtual void Sample::test2()
virtual void test2() = 0;
^
2.原因
純粋仮想関数(pure virtual function)をもつクラスは抽象クラス(abstract class)となるので、その型のオブジェクトは定義できないようです。
3.対処
クラス定義をポインタ型にすることでこのエラーを回避できます。
#include "sample.h"
Sample *sample[10];
int main() {
sample[0]->test1();
return 0;
}
ポインタ型にするため、関数へのアクセスは"."ではなく、"->"に変更します。
4.参考サイト
参考サイトは下記です。ありがとうございました。
Posted by yujiro このページの先頭に戻る
トラックバックURL
コメントする
greeting