2011-01-09 10 views
3

クラスの基本コンストラクタに値と定数列挙を渡すことは可能ですか?例えばC++列挙型の呼び出し基本コンストラクタ

enum CarBrand 
{ 
    Volkswagen, 
    Ferrari, 
    Bugatti 
}; 

class Car 
{ 
    public: 
     Car(int horsePower, CarBrand brand) 
     { 
      this->horsePower = horsePower; 
      this->brand = brand; 
     } 
     ~Car() { } 
    private: 
     int horsePower; 
     CarBrand brand; 
}; 

class FerrariCar : public Car 
{ 
    public: 
     // Why am I not allowed to do this ..? 
     FerrariCar(int horsePower) : Car(horsePower, CarBrand.Ferrari) { } 
     ~FerrariCar(); 
}; 

例の線に沿って何かをコンパイルするとき、私は次のエラーを取得していますので:expected primary-expression before ‘.’ token

任意の助けをいただければ幸いです!

+0

だけで簡単なメモ - あなたの 'クラスFerrariCar'が持っています大文字の 'Class' - ' class'である必要があります。 –

+0

本体に代入の代わりにコンストラクタの初期化リストを使用したい場合もあります。 – David

答えて

10

C++では、列挙型の前に接頭辞型名を付けません。ちょうどFerrariと言ってください。

+0

ありがとうございます、これはうまくいくようです! – Kevin

4

C++列挙型は、周囲のスコープにその値を展開する - あなただけの

FerrariCar(int horsePower) : Car(horsePower, Ferrari) { } 

C++ 0xのがJavaの列挙型のように振る舞う新しい列挙型クラスをもたらすと言うことができ、この場合ので、あなたが書くことができるように:

enum class CarBrand { 
    Volkswagen, 
    Ferrari, 
    Bugatti 
}; 

とし、値をCarBrand::Ferrariとして使用します。ドキュメントから

+0

C++ 0xは素晴らしいと思う:)私はおそらくそのことを読むべきだ。 – Kevin

0

- ISO/IEC 14882:2003(E)、ページ113 - ポイント10

列挙名と列挙型指定子によって宣言された各列挙子はすぐに含まれているスコープで宣言されていますenum指定子これらの名前は、[..]と[..]のすべての名前に対して定義された有効範囲規則に従います。クラススコープで宣言された列挙子((ドット)::、と。 - >(矢印))クラスのメンバアクセス演算子を使って参照することができ

class X 
{ 
    public: 
    enum direction { left=’l’, right=’r’ }; 
    int f(int i) 
    { return i==left ? 0 : i==right ? 1 : 2; } 
}; 
void g(X* p) 
{ 
    direction d;  // error: direction not in scope 
    int i; 
    i = p->f(left);  // error: left not in scope 
    i = p->f(X::right); // OK 
    i = p->f(p->left); // OK 
    // ... 
} 
関連する問題