2013-02-08 11 views
8

Mam następujące klasy podstawowej„Używanie” słowo kluczowe aby zadzwonić klasa bazowa konstruktor

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

oraz następujące klasy pochodnej

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

chcę użyć konstruktora klasy bazowej, aby utworzyć obiekt jak to

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

czytałem, że można używać za pomocą słowa kluczowego, ale gdy próbuję go używać jak

using Grammateas::Grammateas; 

kompilator zwróci komunikat

error: ‘Grammateas::Grammateas’ names constructor

możesz pomóc mi zrozumieć, używając słowa kluczowego z konstruktorów?

+1

To jest dla * dziedziczenia * konstruktorów ... –

+2

W końcu stwierdziłem, że ta funkcja jest dostępna tylko w GCC 4.8 Mam gcc (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2 –

Odpowiedz

9

Twój kod - z using Grammateas::Grammateas; powinien działać. (Ale uwaga: odziedziczony konstruktor pozostawi niezainicjowany _hours).

Dziedziczenie konstruktorów poprzez using -deklaracje to nowa funkcja w C++ 11. Może Twój kompilator jeszcze nie obsługuje tej funkcji lub ma problemy z łączeniem dziedziczonych konstruktorów i innych przeciążeń. (Jeśli akceptuje specyfikator final, wydaje się, że jest poprawnie skonfigurowany do kompilacji C++ 11).

+3

Zauważyłem, że ta funkcja jest dostępna tylko w GCC 4.8. Mam GCC (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2. W porządku z ostatecznym słowem kluczowym i -std = C++ 11 –