2013-02-08 4 views
8

У меня есть следующий базовый класс«Использование для» ключевого слова для вызова конструктора базового класса

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 Grammateas::Grammateas; 

компилятор возвращает сообщение

error: ‘Grammateas::Grammateas’ names constructor

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

+1

Это для * наследующих * конструкторов ... –

+2

Наконец, я обнаружил, что эта функция доступна только при GCC 4.8 У меня есть gcc (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2 –

ответ

9

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

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

+3

Я обнаружил, что эта функция доступна только в GCC 4.8. У меня GCC (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2. Все в порядке с ключевым словом final и -std = C++ 11 –

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