我无法理解我的代码发生了什么:为什么我得到“没有匹配函数来调用push_back”错误。我只能猜测这是一个新的错误...
int main(){
typedef std::tr1::shared_ptr<Base> Base_p;
typedef std::vector<Base_p> VectorPointers_t;
std::tr1::shared_ptr<Derived> myDer01(Derived);
VectorPointers_t myVector = VectorPointers_t();
myVector.push_back(myDer01);
}
答案 0 :(得分:4)
试试这个:
VectorPointers_t myVector;
myVector.push_back(Base_p(new Derived));
您的代码中存在一个很大的错误:声明myDer01
的行实际上声明了函数而不是变量。但即使您编写了(Derived())
而不是Derived
,也会出错,因为您无法从对象构造共享指针 - 仅来自指针!所以你真的想说new Derived
。
答案 1 :(得分:-1)
shared_ptr是一个类模板,每次使用不同参数调用该模板都会产生一个单独的类。解决方案是仅创建指向基类的共享指针。