2014-01-23 4 views
0

나는 다음과 같은 코드를 가지고 :이상한 컴파일러 오류가있는 shared_ptr을 사용하고 make_shared 때

첫 번째 줄은 줄 번호 (182)

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

에게되는 I 얻을 다음과 같은 오류 :

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>’ 

무엇 내가 여기서 잘못하고있어?

답변

2

make_shared은 0123의 이름이 아닌 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 사본을 shared_ptr

+0

감사를 피하기 위해하지 const shared_ptr<Fan> &fan을 통과해야한다,이 코딩의 너무 많은 시간 후에 발생 ... –

관련 문제