【发布时间】:2012-11-07 16:24:15
【问题描述】:
问题是 C++ 不允许在类中声明命名空间。(我在网上搜索并找到了这个;如果不是真的,请说出来)那么,什么是欺骗这个问题的最佳方法?
上下文:我的班级中有一个枚举。
class GameCharacter {
public:
enum MovingState {
Running,
Walking,
Stopped
};
...
};
OBS:这个例子不是真实的,完全是假设的。
C++ 定义枚举名称在类范围内,然后要使用这些状态,我必须直接从类名使用范围运算符(例如GameCharacter::Running;或using GameCharacter::Running)。
我认为这很糟糕,因为属于枚举的名称在类范围内;我想为 RunningState 枚举提供一个范围。 (以这种方式访问它:GameCharacter::MovingState::Running)
然后,我的第一个想法是创建一个命名空间来定义枚举的范围。
class GameCharacter {
public:
// does not compile
namespace MovingState {
enum State {
Running,
Walking,
Stopped
};
};
...
};
但是 C++ 禁止它。此代码无法编译。 (main.cpp:3:5: error: expected unqualified-id before ‘namespace’)
我之所以尝试以这种方式做事,是因为有可能创建具有相同范围内名称的第二个枚举。这可能会导致名称冲突。
class GameCharacter {
public:
enum MovingState {
Running,
Walking,
Stopped
};
enum DrivingState {
Accelerating,
Breaking,
Stopped // Compilation error: conflicts with previous declaration ‘GameCharacter::MovingState GameCharacter::Stopped’
};
...
};
(我的想法是,在这种情况下,状态应该被称为GameCharacter::MovingState::Stopped 和GameCharacter::DrivingState::Stopped)
那我该怎么办?
【问题讨论】:
-
Breaking表示停止工作。你的意思是Braking? -
当然,对不起我的英语不好......
-
很多以英语为母语的人都搞错了——事实上,我最近在几个 SO 问题上看到了同样的拼写错误!
标签: c++ enums namespaces scope