2015-02-01 11 views
2

Итак, я хочу иметь класс 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

+2

Для этого вам нужна поддержка C++ 11. Похоже, ваш компилятор не поддерживает эту функцию. – juanchopanza

ответ

1

Как вы можете видеть here, наследуя конструкторы - это функция C++ 11, еще не поддерживаемая Microsoft Visual Studio.

Код, который вы опубликовали, является правильным и works, как и ожидалось, с помощью компилятора C++ 11.

0

Компилятор пытается вызвать конструктор по умолчанию Child (без аргументов). Таким образом, чтобы сделать код работы необходимо предоставить явный конструктор:

struct Child : public Base{ 
    using Base::Base; 
    Child(int i):Base(i) {} 

}; 
+0

Вам не хватает точки. OP ожидает, что их отлично действующий C++-код будет работать, но их компилятор недостаточно современен. – juanchopanza

+0

@juanchopanza, получил его, спасибо) –

3

наследуя конструкторов C++ 11 особенность языка,

struct A { A(int); }; 
struct B: A { using A::A; }; // defines B::B(int) 
B b(42); // OK 

однако, она не поддерживается в Visual Studio 2013, как описано в msdn.

Смежные вопросы

 Смежные вопросы