1

unordered_map に格納されている unique_ptr を取得しようとしています。次のコードを使用します。

#include <unordered_map>
#include <memory>

int *function()
{
    std::unordered_map< int, std::unique_ptr<int> > hash;

    auto iterator=hash.find(5);
    return iterator->second().get();
}

これをコンパイルしようとすると (gcc 4.7.2)、次のエラーが発生します。

test.cpp: In function ‘int* function()’:
test.cpp:9:29: error: no match for call to ‘(std::unique_ptr<int>) ()’

このコードの何が問題なのかわかりません。イテレータから参照を抽出するために別の方法を使用する必要があるかのようですが、それを行う方法がわかりません。

シャチャー

4

2 に答える 2

2

この行:

return iterator->second().get();

これでなければなりません:

return iterator->second.get();

secondは関数ではなく、std::pairマップに含まれる のメンバー変数です。()あなたが今持っているコードは、メンバー変数で演算子を呼び出そうとします。しかし、std::unique_ptr(に格納されているsecond)はそのような演算子を定義していないため、コンパイラはそれを見つけることができません。

于 2013-07-06T14:48:36.820 に答える