class Bakery
{
private:
const int Months = 12; //错误1
double costs[Month];
...
}
错误1 处 : 这个写法行不通 ,因为声明类只是描述啦对象的形式,, 并没有创建对象. 因此, 在创建对象前, 将没有用于储存值的空间 (摘抄自 c++ primer plus)
解决办法1:
class Bakery
{
private:
enum {Month = 12}; //ok
double costs[Month];
...
}
ok处: 用这种方式声明枚举 并不会创建类数据成员, 也就是说, 所有的对象都不包含枚举. 另外, Month 只是一个符号名称, 在作用域为整个类的代码中遇见他时, 编译器会用12代替它 (摘抄自 c++ primer plus)
ps:当出现这种情况的时候枚举将出现问题
enmu egg {Small, Medium, Large};
enmu t_shirt {Small, Medium, Large};
egg Small 与t_shirt Small 在同一个作用域内 将发生冲突
解决办法:
enmu class egg {Small, Medium, Large};
enmu class t_shirt {Small, Medium, Large};
或者
enmu struct egg {Small, Medium, Large};
enmu struct t_shirt {Small, Medium, Large};
使用以上两种需要用枚举明来限定枚举变量 ex:egg::Small t_shirt::Large
解决办法2:
class Bakery
{
private:
static const int Month = 12;//ok
double costs[Month];
...
}
使用static const ,该常量将与其他的静态变量放在一起, 而不是储存在对象中.因此只会有一个Month常量, 被所有的Bakery 独享共享(摘抄自 c++ primer plus)