私はクラスのメンバーとしてこのコンテナを持っている:unordered_map.emplaceコンパイラの時間エラーを教えてください?
std::unordered_map<std::string, Fruit> m_fruits;
私は同じクラスで、それに新しい要素を追加したいが、私は2つの方法を試してみたとの両方が例に基づいて動作するはずです。 (emplaceのページに)しかしどこかで私は間違いを犯しました。 (fruitNameがのconstのstd ::文字列である&)
m_fruits.emplace(fruitName, Fruit());
エラーC2660 'のstd ::ペア::ペア':関数は2つの引数
m_fruits.emplace(std::make_pair(fruitName, Fruit()));
を負いません。エラーC2440 '': '初期化子 リスト'から '_Mypair'に変換できません
フルーツクラス:
class Fruit {
public:
Fruit();
Fruit(const Fruit& fruit) = delete;
Fruit operator=(const Fruit& fruit) = delete;
virtual ~Fruit();
};
更新:
私は果物のデフォルトのコピーコンストラクタを削除してはいけないことが分かってきました。
しかし、私はそれを取得しません。 emplaceは、コンテナの外側にオブジェクトを作成するのではなく、コンテナにコンテナを作成するためのものですか?
は、コンテナ内のキーを持つ要素がない場合は、コンテナに新しい要素が与えられた引数でその場でを構築挿入します。
このメソッドを使用するには、なぜコピーコンストラクタが必要なのか誰かが説明してください。 ありがとう!
[MCVE]を提供できますか? struct Fruit {};のような 'Fruit'のためのダミー宣言を使用してください。 '_Mypair'も疑わしいですが、標準のC++実装のようには見えません。 –
'' m_fruits [fruitName] = Fruit(); '' – solti
@πάνταῥεῖ - '_Mypair'は広く使われている標準ライブラリ実装のスタイルです。 –