[解決済み】エラー:削除された関数の使用
質問内容
友人が書いたC++のコードに取り組んでいるのですが、gcc4.6でコンパイルすると、今まで見たこともない以下のようなエラーが発生します。
error: use of deleted function
‘GameFSM_<std::array<C, 2ul> >::hdealt::hdealt()’ is implicitly deleted because the default definition would be ill-formed:
uninitialized non-static const member ‘const h_t FlopPokerGameFSM_<std::array<C, 2ul> >::hdealt::h’
編集:これはboost MSMを使ったコードの一部からきています。 ブースト・ウェブページ
編集2:
= delete()
はソースコードのどこにも使われていません。
一般的に、このエラーは何を意味するのでしょうか?このタイプのエラーが発生した場合、何を確認すればよいのでしょうか?
解決方法は?
エラーメッセージには、デフォルトのコンストラクタが削除されたことが明確に書かれています。 暗黙のうちに . その理由は、クラスが非静的な const 変数を含んでおり、デフォルトのコンテナでは初期化されないからです。
class X {
const int x;
};
以降
X::x
は
const
しかし、デフォルトのコー タは通常これを初期化しない(POD型だから)。したがって、デフォルトのコー タを使うには、自分で定義する必要があります(そして、そのコー タは
x
). 同じような状況は、参照であるメンバーでも得られます。
class X {
whatever &x;
};
この2つは、本質的に同じ理由で、代入演算子の暗黙の生成も無効化することに注目すべきかもしれません。暗黙の代入演算子は通常メンバー単位の代入を行いますが、constメンバーや参照メンバーでは、そのメンバーが代入できないため、代入ができません。代入を機能させるには、独自の代入演算子を書く必要があります。
このため
const
メンバーは
通常
代入を行う場合、const メンバはどうせ代入できないからです。典型的なケースでは、すべてのインスタンスが同じ値を持つことになるので、同じ値を持つ変数のコピーをたくさん持つ代わりに、1つの変数へのアクセスを共有したほうがよいでしょう。
もちろん、異なる値を持つインスタンスを作成することは可能です。たとえば、オブジェクトを作成するときに値を渡しますから、2つの異なるオブジェクトが2つの異なる値を持つことは可能です。しかし、それらを入れ替えるようなことをしようとすると、constメンバは入れ替えられるのではなく、元の値を保持することになる。
関連
-
[解決済み】fatal error: Python.h: そのようなファイルやディレクトリはありません
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み】'cout'は型名ではない
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] 仮想デストラクタはいつ使うのか?
-
[解決済み】高放射能環境下で使用するアプリケーションのコンパイルについて
最新
-
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++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】C++の余分な資格エラー
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み】デバッグアサーションに失敗しました
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む