& Quot; Использование & quot; ключевое слово для вызова конструктора базового класса

У меня есть следующий базовый класс

class Grammateas
{
public:
Grammateas(std::string name):_name(name){};
virtual ~Grammateas(){};
private:
std::string _name;
};

и следующий производный класс

class Boithos final : public Grammateas
{
public:
//using Grammateas::Grammateas;
Boithos(int hours):Grammateas("das"),_hours(hours){};
virtual ~Boithos(){};
private:
int _hours;
};

Я хочу использовать конструктор базового класса для создания объекта, как это

   Boithos Giorgakis(5); //works
Boithos Giorgakis("something"); //Bug

Я прочитал, что могу использовать ключевое слово using, но когда я пытаюсь использовать его как

   using Grammateas::Grammateas;

Компилятор вернет сообщение

ошибка: конструктор имён Grammateas :: Grammateas

Можете ли вы помочь мне понять ключевое слово using с конструкторами?

8

Решение

Ваш код — с using Grammateas::Grammateas; без комментариев — должно работать. (Но будьте осторожны: унаследованный конструктор уйдет _hours неинициализированный.)

Наследование конструкторов через using-declarations — это новая функция в C ++ 11. Возможно, ваш компилятор еще не поддерживает эту функцию или имеет проблемы с объединением унаследованных конструкторов и другими перегрузками. (Если он принимает final по-видимому, он правильно настроен для компиляции C ++ 11.)

9

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]