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 に答える