是否可以将值和常量枚举传递给类的基础构造函数?
例如:
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 :(得分:10)
在C ++中,不要使用枚举类型名称为枚举值添加前缀。只需说Ferrari
。
答案 1 :(得分:4)
C ++枚举将其值扩展到周围范围 - 所以在这种情况下你可以说
FerrariCar(int horsePower) : Car(horsePower, Ferrari) { }
C ++ 0x带来了类似Java枚举的新枚举类,所以你可以写:
enum class CarBrand {
Volkswagen,
Ferrari,
Bugatti
};
然后将值用作CarBrand::Ferrari
。
答案 2 :(得分:0)
来自文档 - ISO / IEC 14882:2003(E),第113页 - 第10点
枚举名称和enum-specifier声明的每个枚举器都在立即包含枚举说明符的作用域中声明。这些名称遵循为[..]和[..]中的所有名称定义的范围规则。在类范围中声明的枚举器可以使用类成员访问运算符(::,。(dot)和 - >(箭头))来引用
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
// ...
}