使用shared_ptr和make_shared时出现奇怪的编译器错误

时间:2014-01-23 04:52:05

标签: c++11

我有以下代码:

第一行是第182行

void FanBookServer::postRequest(const shared_ptr<Fan> fan){
    auto newPost = std::shared_ptr<FanBookPost>::make_shared(fan);
    posts.insert(newPost->getId(), *newPost);
}

我得到以下错误:

FanBookServer.cpp: In member function ‘void mtm::FanBookServer::postRequest(std::shared_ptr<mtm::Fan>)’:
FanBookServer.cpp:183:17: error: ‘make_shared’ is not a member of ‘std::shared_ptr<mtm::FanBookPost>’
FanBookServer.cpp:183:62: error: unable to deduce ‘auto’ from ‘<expression error>’

我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

make_shared是属于命名空间std的函数,而不是std::shared_ptr<T>的成员。关于第二部分的错误信息已经非常清楚了。

应为std::make_shared<FanBookPost>(fan)


并且您的代码看起来不正确。为什么需要使用shared_ptr?你应该能够做到

FanBookPost newPost{fan};
posts.insert(newPost.getId(), newPost);

您应该通过const shared_ptr<Fan> &fan而不只是const shared_ptr<Fan> fan来避免复制shared_ptr