のは、私は最近、プロジェクトのどこかで見つけたコードの構造を見てみましょう:列挙値の衝突
namespace Test
{
enum EName
{
CoolEnum,
NiceEnum
};
enum CoolEnum
{
CoolVal1,
CoolVal2
};
enum NiceEnum
{
NiceVal1,
NiceVal2
};
}
コンパイラはこのような何かを可能になぜ私の質問です。ここでコードサンプルを取得しましょう:
Test::CoolEnum cEnum = Test::NiceVal1; // INVALID, as compiler refers to Test::CoolEnum value of Test::Ename enum
なぜこのような混乱が許されますか?なぜ私はenumキーワードを前に付ける必要があるのか理解しているので、コンパイラは、同じ名前空間内の他の列挙型の値を使用せず、与えられた列挙型の変数を宣言していることをはっきりと知っています。私はちょうどそのような構造を作ることさえも最初の場所でなぜ理解していない。
Ideoneのコードがエラーを引き起こすため、コンパイラが定義していると思います。http://ideone.com/4GDTF – tinman
だから私はgccを配置しましたが、私が知っている限り、そのような構築は可能です。 –
@Kamil NiceEnumの列挙定数の名前を変更するには、CoolEnumからコピー&ペーストして競合するためです。 –