[解決済み] C++のmap型引数で[]を使用する場合、空のコンストラクタが必要なのはなぜですか?
2022-09-15 22:57:15
質問
以下もご参照ください。 C++標準のリストとデフォルトで構築可能な型
大きな問題ではありませんが、私のクラスが特定の引数なしでインスタンス化されることを望まないので、ただ迷惑なだけです。
#include <map>
struct MyClass
{
MyClass(int t);
};
int main() {
std::map<int, MyClass> myMap;
myMap[14] = MyClass(42);
}
これは、以下のようなg++のエラーが発生します。
/usr/include/c++/4.3/bits/stl_map.h:419: error: no matching function for call to 'MyClass()'.
これは、デフォルトのコンストラクタを追加すると、うまくコンパイルされます。
どのように解決するのですか?
この問題は、operator[]に起因しています。SGIドキュメントより引用。
data_type& operator[](const key_type& k)
- オブジェクトへの参照を返します。 特定の への参照を返します。マップがまだそのようなオブジェクトを含んでいない場合 がそのようなオブジェクトを含んでいなければoperator[]
はデフォルトのオブジェクトを挿入します。data_type()
.
デフォルトのコンストラクタがない場合は、insert/find関数を使用することができます。 以下の例ではうまく動作しています。
myMap.insert( std::map< int, MyClass >::value_type ( 1, MyClass(1) ) );
myMap.find( 1 )->second;
関連
-
[解決済み】 unsigned int vs. size_t
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み】C++の余分な資格エラー
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み】'std::cout'への未定義の参照
-
[解決済み] Collatz予想の検証を行う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++でint型に無限大を設定する
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】システムが指定されたファイルを見つけられませんでした。