質問
もの作成とavr-gccいたリンカーの誤り以下のような:
undefined reference to `__cxa_pure_virtual'
がその場で発音を確認することが この文書 国:
の
__cxa_pure_virtual
機能エラーハンドラが呼び出されますが、純粋な仮想関数が呼び出されます。を書いていてC++のアプリは純粋な仮想関数を提供する必要があ自分の
__cxa_pure_virtual
エラーハンドラ機能です。例えば:
extern "C" void __cxa_pure_virtual() { while (1); }
この機能を定義する示唆されるように修正の誤差が教えてください:
- 何が目的のこの関数は、
- なぜすべき義が必要で自分でや
- なぜいただくこのコードとして無限ループ?
解決
ればどこでも実行時のプログラムオブジェクトが作成された仮想関数ポインタは、演題が受付されていないが、対応する関数が呼び出され、呼び出しを"純粋な仮想関数が'.
のハンドラについて説明していただけまして定めるべきではないかと、デフォルトでは図書館にいらっしゃるお客様の開発環境です。せてもらう良い機会になりそうだを省くデフォルト図書館は、このハンドラは未定義:リンカーを見て宣言で定義しない。この場を提供する必要があります自分のバージョン。
の無限ループには可能なので、女声'エラー:ユーザーアプリを作成できるソフトウェアを直ちに通知します。その他'loud"実行が可能です。
他のヒント
1)の目的の機能__cxa_純_仮想()?
純粋な仮想関数が呼び中のオブジェクト建設を壊すそうなると、__cxa_純_仮想()が呼び出される報告書のエラーになります。見 い"純粋な仮想関数呼び出し"の衝突から来るのでしょうか?
2)何故が定義する必要がありその理由を教えてください。
通常、この機能は特定のラスタ化ライブラリを++などLinuxの場合)、avr-gccのArduinoツールチェーンとなる特定のラスタ化ライブラリを++.
Arduino IDEの管理を避けるリンカーエラー時の建物の一部のプログラムで統のオプション"-ffunction部-fdata部"とのリンク"-Wl,--gc-部門"、下部を参照未使用にならない。
3)理由でコード__cxa_純_仮想()としての無限ループ?
これは伸びるこれはすごいで少なくとも安全;ものになる。いであるということで中止のプログラムのエラーになります。無限ループにいくのデバッグのものを持っていない場合、デバッガで割り込み実行してもらうスタック印刷.