求助,c++的问题
typedef double money;
class account
{
public:
money balance()
{
return bal;
}
private:
typedef long double money;//error:cannot change meaning of money……1
money bal;
};
这是 c++primer P383 的一段程序示例,书中说1处的语句是错的,但在紧接着的 P385 又有类似的代码,书上却未说明是错的,精通c的高手帮我解疑迷惑,感激不尽啊!下面是被认为没有错的代码:
typedef string type;
type initval();
class exercise
{
public:
typedef double type;//这种情况到底是有错,还是没错?
type setval(type);
type initval();
private:
int val;
};
在c++primer p382页最下面有这样一句话,“一旦一个名字被用作类型名,该名字就不能被重复定义”,我怀疑这句话是不正确的,请问下,这句话是否正确?
[解决办法]
typedef double money;第一行,已经定义money了,后面就不能再次定义了
[解决办法]
问题的关键是你第二次定义某个名字之前,这个名字有没有用过。
1、代码1之所以错误,是因为第二次定义typedef long double money;/前已经使用了money。如果这样可以的话,就会出现下面的情况:
第二次定义后面的money肯定会服从第二次的定义,也就是long double,而前面balance()的返回值肯定是服从第一次定义,也就是double。你可以想象一下,在同一个类的作用域中,money有两个不同的定义,这样显然是不合理的,当然是不对的。
2、而对于代码2,因为在第一次定义后和第二次定义前,这个名字Type没用被使用过,所以在类的作用域中,第一次的定义会被第二次定义覆盖掉,也就不会出现一个名字两种定义的情况,所以是没有问题的。
不知道这么解释可不可以啊?
[解决办法]