2016-04-03 20 views
0

私はEnumクラスを習得しようとしていました。Enumクラスは-std = C++でのみ利用可能です。11

#include <iostream> 
using namespace std; 
int main() 
{ 
    enum class Color 
    { 
    RED, 
    BLUE 
    }; 

    Color color = Color::RED; 

    if (color == Color::RED) 
    cout << "The color is red!\n"; 
    else if (color == Color::BLUE) 
    cout << "The color is blue!\n"; 

    return 0; 
} 

「コードは赤いです!」というコードをコピーしました。私は現在のDev-C++ 5.11を使用してい

warning: scoped enums only available with -std=c++11 or -std=gnu+11 

error:'Color' is not a class or namespace 

: はしかし、私のコンパイラは、このエラーが発生します。どのようにこれを修正するための任意のアイデア?

+0

ヘルプセンターでMCVEについてお読みください。 – philipxy

+0

「Dev-C++ 11」とは何ですか? –

+0

Dev-C++は、MinGWまたはTDM-GCCのいずれかを基礎とするコンパイラとして使用する、Windows用の無料IDEです。 –

答えて

1

の指示に従って、C++ 11サポートを有効にします。

ツールへ
  1. 移動 - >コンパイラオプション
  2. [設定]タブ
  3. コード生成]タブ
  4. 変更Language standard -std同じスコープ内C++ 5.1列挙子でC++ 11
+0

また、Visual Studioなどの最新のIDEを試してみることを検討してください。 ;) –

0

へのすべてでなければなりませんお互いに、および他の変数名から区別できます。例:

enum Color1 { 
Bronze, 
Silver, 
Gold 
}; 

enum Color2 
{ 
Silver, //conflicts with Color1’s Silver 
Gold, //conflicts with Color1’s Gold 
}; 

C++ 11 enums.Keyword class列挙列挙名。あなたは次のようにコードを編集C++ 5.1 .Henceを使用しているキーワードの間に表示されるスコープと呼ばれる新しいカテゴリとスコープの問題解決:

#include <iostream> 
using namespace std; 
int main() 
{ 
    enum Color 
    { 
    RED, 
    BLUE 
    }; 

    Color color =RED; 

    if (color == RED) 
     cout << "The color is red!\n"; 
    else if (color == BLUE) 
     cout << "The color is blue!\n"; 
    return 0; 
} 

https://ideone.com/v42Ihs

1

列挙型クラスは、2011年にC++に追加された列挙型です。そのため、そのバージョンのC++(-std = C++ 11)を使用することをコンパイラに伝える必要があります。 C++の以前のバージョン(C++ 03など)には、その機能はありませんでした。

Dev-C++はコンパイラとしてgccを内部的に使用しています(g ++とgccは同義語です)、Dev-C++バージョンで使用されている内部gccバージョンはgcc 4.8.4以上で、 "C++バージョンはC++ 03(03は2003を意味します)でした。したがって、gccに、ソースコードが-std = C++ 11でC++ 11で書かれていることを通知する必要があります。

現代版のgccや他のコンパイラは、デフォルトではC++ 11コード(またはC++ 14コード)をコンパイルしていると仮定しているため、このオプションを古いコンパイラに追加したり、IDEを更新したりすることができますデフォルトでC++ 11を使用するバージョンに変換します。

関連する問題