使用子类的父类构造函数
Posted
技术标签:
【中文标题】使用子类的父类构造函数【英文标题】:Use parent class constructor for child 【发布时间】:2015-02-01 11:16:08 【问题描述】:所以,我想要拥有所有来自其父类的构造函数的 Child 类。这在 C++ 中可能吗?我试过using
声明,但它不起作用。到目前为止,这是我所得到的:
struct Base
Base(int i)
std::cout << "Construcetd a base with " << i << std::endl;
;
struct Child : public Base
using Base::Base;
;
int main()
Child c(1);
我得到的错误:
error C2664: 'Child::Child(const Child &)' : cannot convert argument 1 from 'int' to 'const Child &'
哦,我正在使用 Visual Studio 2013
【问题讨论】:
您需要 C++11 支持。您的编译器似乎不支持此功能。 【参考方案1】:继承构造函数是 C++11 语言的特性,
struct A A(int); ;
struct B: A using A::A; ; // defines B::B(int)
B b(42); // OK
但是,Visual Studio 2013 不支持它,如 msdn 中所述。
【讨论】:
【参考方案2】:如您所见here,继承构造函数是 Microsoft Visual Studio 尚不支持的 C++11 功能。
您发布的代码是正确的,works 符合 C++11 编译器的预期。
【讨论】:
【参考方案3】:编译器尝试调用默认的Child
构造函数(不带参数)。因此,要使您的代码正常工作,您需要提供显式构造函数:
struct Child : public Base
using Base::Base;
Child(int i):Base(i)
;
【讨论】:
你没有抓住重点。 OP 希望他们完全有效的 C++ 代码能够工作,但他们的编译器还不够现代。以上是关于使用子类的父类构造函数的主要内容,如果未能解决你的问题,请参考以下文章