[解決済み] 未実装の純粋仮想メソッド?
質問
コンパイル時に、unimplemented pure virtual methodというエラーが何度も出ます。 抽象的な基底クラスの純粋仮想メソッドをすべて実装しています。何かアイデアはありますか?
ここに抽象ベースクラスがあります。
class record{
public:
virtual int getID()=0;
virtual record *clone();
};
と実装しています。
class sdata: public record{
public:
sdata(std::string s = ""){data=s; ID=atoi(data.substr(0,8).c_str());}
virtual int getID(){return ID;}
private:
std::string data;
int ID;
};
申し訳ありませんが、以下がエラーメッセージの全文です。
record' に未実装の純粋仮想メソッド 'getID' があります。
おそらく、このコードの一部がエラーを引き起こしているのでしょう。
int hashTable::hash(record *x) {
return floor(m * (x->getID() * A - floor(x->getID() * A)));
}
解決方法は?
エラーの原因となっているコードを見なければ、何が起こっているのか正確に知ることは困難です。 もしこれがコンパイル時のエラーであるなら、その原因となるようなものはここには見当たりません。
しかし、実行時エラーが発生している場合、考えられる原因としては、以下の2つが挙げられます。
(1) ベースクラスのコンストラクタやデストラクタの内部からメンバ関数を呼び出す(間接的でも可)。
(2) 派生クラスが、ベースクラス版の関数を実装せずに呼び出すこと。
この両方のエラーを示す例としては、次のようなものがあります。
struct Base {
Base()
{
call_foo(); // Oops, indirectly calls Base::foo() (Scenario 1)
}
void call_foo() const {
foo();
}
protected:
virtual void foo() const = 0;
};
struct Derived : Base {
protected:
virtual void foo() const {
Base::foo(); // Oops, unimplemented virtual base function (Scenario 2)
}
};
int main() {
Derived().call_foo();
}
== UPDATE: コンパイル時のエラーの可能性があります。
あなたのサンプルコードでは、recordに純粋仮想でないclone()メンバ関数があり、そのメンバ関数は
record *
. レコードは抽象的なものなので、レコードを直接作成することはできません(具象的なサブクラスのみ)。 このことから、clone()メンバ関数もおそらく純粋仮想関数であるべきであることがわかります。
return new record()
この場合、ベースクラスが純粋仮想関数を持っているというエラーが発生します。
関連
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】Visual Studio 2013および2015でC++コンパイラーエラーC2280「削除された関数を参照しようとした」が発生する
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された
-
[解決済み] 仮想デストラクタはいつ使うのか?
-
[解決済み] C++で仮想関数が必要な理由とは?
-
[解決済み】バーチャル/ピュアバーチャルの説明
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】'cout'は型名ではない
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません