2015-10-28 2 views
6

私はヘッダファイルに(方向という)列挙型を宣言した:が取得エラー「列挙すると、クラスまたは名前空間ではありません」 - C++

enum Direction {LEFT, RIGHT}; 

その後、私は方向値とセットを取るコンストラクタを持っていますそれは別のDirection変数(stringDirection)のためのものです。

bool InformationWidget::move(Direction direction){ 
    stringDirection=direction; 

return true; 
} 

そして最後に、私はそれの値をチェックif文を持っている:私は、if文が..任意のアイデアことで、エラーを取得していますどこ

if (stringDirection == Direction::RIGHT) 

これは? 私は以前のスレッドを見てみましたが、役に立たないものは何も見つかりませんでした。

ありがとうございます!

編集:ここでは

が私のファイルです:

Widget.h

enum class Direction {LEFT, RIGHT}; 

class Widget { 
public: 
    virtual bool... 
    ... 
}; 

information.h

class InformationWidget: public Widget { 
public: 
    ... 
    Direction stringDirection; 
    ... 
}; 

information.cpp

void InformationWidget::show(){ 

... 

if (stringDirection == LEFT) { 
... } 
} 

答えて

11

あなたはスコープの列挙をしたい場合Direction::を前置すること列挙子を必要とするように、すなわち、enum classまたはenum structとしてあなた列挙型を宣言します。

enum class Direction {LEFT, RIGHT}; 

古いCスタイルの列挙をしたい場合はそうでない場合、あなたは省略する必要があります彼らはOTHと衝突することがあります後者の場合には、列挙子識別子はグローバル名前空間に配置されることを

if (stringDirection == RIGHT) 

お知らせ:エラーメッセージが文句を言っている名前空間修飾子Direction:: er識別子。

+0

返信いただきありがとうございます。私はこれらの解決策を認識していましたが、両方とも機能しません。 私は最初の1つ( 'クラス'を追加する)を試しても、私には同じエラーが表示されます。 私は2番目のものを試してみると、 "シンボル 'RIGHT'を解決することができませんでした"というif文の右部分だけがエラーになります。 – Gambit2007

+0

それから、あなたはどこか他のところで間違ったことをしており、[MCVE](http://stackoverflow.com/help/mcve)を提供する必要があります。 – emlai

+0

私は本当にここで何が問題なのか分かりません。ヘッダーファイルの列挙型を宣言しました。.cppファイルに含まれています(問題があれば、純粋に抽象基本クラスのメソッドを実装しています) – Gambit2007

関連する問題