問題是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
) 那麼,我該怎麼辦?
'打破'意味着停止工作。你的意思是'制動'? –
當然,對不起我的英語不好...... –
很多母語爲英語的人說得對 - 實際上我最近看到幾個SO問題上的拼寫錯誤! –