繁体   English   中英

指向类的派生成员的指针

[英]pointers to derived members of the class

例如,如果我有一些Base类并从它Derived ,则我也有一些共享指针的列表:

list<shared_ptr<Base> > list

我创建共享指针:

line 5    shared_ptr<Derived> ptr(new Derived(//some constructor));

我的问题是,我可以做这样的事情:

list.push_back(ptr);

如果是,有人可以解释为什么我会收到错误(我在第5行收到此错误)

no matching function for call to //here It writes me my constructor to Derived

预先感谢您的任何帮助

我的问题是,我可以做这样的事情吗: list.push_back(ptr);

是的-您的问题与继承或智能指针无关-您根本没有声明要使用的构造函数。

重现该错误的简单示例是:

struct X {};
X x(1);

这给你:

没有匹配的函数来调用' X::X(int) '

您可以通过不同地构造实例或添加缺少的构造函数来解决此问题:

struct X { X(int) {} };

您试图将类型shared_ptr<Derived>的值分配给shared_ptr<Base>的容器。 尝试将指向Derived指针分配给shared_ptr<Base> ,然后将其添加到列表<>:

class BASE {
 public:
  BASE() { }
  const char *name() const { return nameImpl(); }
 private:
  virtual const char *nameImpl() const { return "BASE"; }
};

class DERIVED : public BASE {
 public:
  DERIVED() { }
 private:
  virtual const char *nameImpl() const { return "DERIVED"; }
};


int main() {

 list< shared_ptr< BASE > > baseSequence;

 shared_ptr< BASE > basePtr(new BASE);
 baseSequence.push_back( basePtr );
 basePtr.reset(new DERIVED);
 baseSequence.push_back( basePtr );

 shared_ptr< DERIVED > derivedPtr(new DERIVED);
 baseSequence.push_back( derivedPtr ); 

 BOOST_FOREACH(const shared_ptr< BASE > &ptr, baseSequence) {
  cout << ptr->name() << "\n";
 }
 return 0;
}

`

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM