У меня есть следующий базовый класс
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 с конструкторами?
Ваш код — с using Grammateas::Grammateas;
без комментариев — должно работать. (Но будьте осторожны: унаследованный конструктор уйдет _hours
неинициализированный.)
Наследование конструкторов через using
-declarations — это новая функция в C ++ 11. Возможно, ваш компилятор еще не поддерживает эту функцию или имеет проблемы с объединением унаследованных конструкторов и другими перегрузками. (Если он принимает final
по-видимому, он правильно настроен для компиляции C ++ 11.)
Других решений пока нет …