1

我正在尝试将 unique_ptr 存储在 unordered_map 中。我使用以下代码:

#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 回答
1

second是的成员变量,std::pair但您试图像函数一样调用它。请改用以下内容。

return iterator->second.get();
于 2013-07-06T14:48:44.610 回答