3

cppreference.comによると、にstd::ios_base::failureは2つの継承階層があります。

ここに画像の説明を入力してください

質問

なぜ、そして何が違うのですか?

バックグラウンド

g ++ 4.7.1を使用すると、このエラーが発生しました。これまでのところ、最初の継承階層が原因であることがわかっています。

エラー:'const class std :: ios_base::failure'には'code'という名前のメンバーがありません

アップデート

gccを使用すると、C++11モードでもios_base::failureから継承します。ここexceptionから引用:

ios_base::failureはsystem_errorから派生していません。

4

1 に答える 1

5

これは、std::system_errorが C++11 で導入されたためです。std::ios_base::failure前から直接派生std::exception

code()メソッドは のメンバであるためstd::system_errorstd::ios_base::failureC++11 をサポートしない環境では公開されません。

于 2012-07-30T05:33:00.170 に答える