には、次のC++列挙を考えるコンパイラ列挙再宣言の競合を解決する:どのよう
enum Identity
{
UNKNOWN = 1,
CHECKED = 2,
UNCHECKED = 3
};
enum Status
{
UNKNOWN = 0,
PENDING = 1,
APPROVED = 2,
UNAPPROVED = 3
};
ザ・コンパイラは、両方のUNKNOWN
アイテムを矛盾と、このエラーがスローされました:
error: redeclaration of 'UNKNOWN'
私は1つを変更し、このエラーを解決することができていますUNKNOWN
〜UNKNOWN_a
の名前を変更する必要はありません。
この競合を解決するにはどうすればいいですか?enum
アイテム名を変更せずにを解決するにはどうすればよいですか?
パラメータとして使用する場合は、そのまま動作しません。 – chris
@chris私は認識しています。これは単純に 'enum class'を使用しない場合の問題の1つです。つまり、列挙型を名前( 'enum value {/*...*/')で宣言して 'void foo(Identity :: value)'のように使うことはできますが、型の利点は失われます安全性など。 –
まあ、面白いことに、C++ 11は特に商業領域では一般的に実行可能ではありません。たとえば、私が働く会社の多くの顧客がRHELのような古いシステムを使い続けていて、システムが正常に実行されている間はアップグレードする必要があります(リリースアップグレード中に重大な非互換性が発生するのはかなり一般的です)。その結果、C++ 11は禁止されており、すべてが古いコンパイラで構築されなければなりません。事実、私が働いた最後の4社のすべてでC++ 11が禁止されました。私が以前に働いた会社の1つはAFAIKもまだMSVC 6でビルドしています:-) – axalis