错误2664 - 无法从std :: vector< ...>转换到std :: tr1 :: shared_ptr

时间:2012-02-09 05:58:31

标签: c++ shared-ptr

需要有关我无法弄清楚的错误消息的帮助。我得到以下内容:

Error   1   error C2664: 'void std::vector<_Ty>::push_back(_Ty &&)' : cannot convert parameter 1 from 'Physics::Box2D' to 'std::tr1::shared_ptr<_Ty> &&'    d:\visual studio 2010\projects\c++\test001\main.cpp 31  1   Test001

不确定原因,代码应该有效。我在StackOverFlow.com上找到了示例代码。也许我错过了一些东西。

请帮助...新手提升图书馆用户

//this code works fine...
Box2D *b = new Box2D();
b->Info();

//but this code fails...
vector< shared_ptr<Box2D> > boxes;
boxes.push_back( new Box2D() );  <--error happens here

1 个答案:

答案 0 :(得分:1)

std::shared_ptr<T>指向T的构造函数为explicit,即您无法隐式转换为此类型。此外,错误消息似乎与代码不匹配。但是,试试这个:

boxes.push_back(std::shared_ptr<Box2D>(new Box2D()));

......或

boxes.push_back(std::make_shared<Box2D>());