我有以下代码:
第一行是第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>’
我在这里做错了什么?
答案 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