[英]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.