0

我无法理解我的代码发生了什么:为什么我收到“没有匹配函数调用 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);  
}
4

2 回答 2

4

试试这个:

VectorPointers_t myVector;

myVector.push_back(Base_p(new Derived));

您的代码中有一个大错误:声明的行myDer01实际上声明了一个函数而不是一个变量。但即使你写了(Derived())而不是Derived它也是错误的,因为你不能从一个对象构造一个共享指针——只能从一个指针!所以你真的很想说new Derived

于 2012-10-08T19:57:47.337 回答
-1

shared_ptr 是一个类模板,每次使用不同参数调用该模板都会产生一个单独的类。解决方案是只创建指向基类的共享指针。

于 2012-10-08T19:58:31.950 回答