[解決済み] 純粋な仮想関数呼び出し」のクラッシュはどこから来るのか?
2022-03-01 19:19:26
質問
私のコンピュータでは、プログラムが「純粋仮想関数呼び出し」というエラーでクラッシュすることがあります。
抽象クラスでオブジェクトを作成できないのに、どうしてコンパイルできるのでしょうか?
解決方法は?
これらは、コンストラクタやデストラクタから仮想関数を呼び出そうとした場合に発生する可能性があります。 コンストラクタやデストラクタから仮想関数を呼び出すことはできないので(派生クラスのオブジェクトがまだ構築されていないか、すでに破棄されている)、純粋仮想関数の場合は存在しないベースクラスのバージョンを呼び出します。
(ライブデモを見る こちら )
class Base
{
public:
Base() { doIt(); } // DON'T DO THIS
virtual void doIt() = 0;
};
void Base::doIt()
{
std::cout<<"Is it fine to call pure virtual function from constructor?";
}
class Derived : public Base
{
void doIt() {}
};
int main(void)
{
Derived d; // This will cause "pure virtual function call" error
}
関連
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] コンストラクタ内の仮想メンバー呼び出し
-
[解決済み] ベースの仮想デストラクタを明示的に呼び出す必要がありますか?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み] なぜC++では純粋仮想デストラクタが必要なのでしょうか?
-
[解決済み] 純粋仮想関数はなぜ0で初期化されるのですか?
-
[解決済み] 実装を伴う純粋な仮想関数
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】構造体のベクター初期化について
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み] Windowsで、「アプリケーションで例外の未知のソフトウェア例外(0x40000015)が発生しました」は、STATUS_FATAL_APP_EXITのことでしょうか。