2016-08-16 16 views
1

は私が下の部分に示さStatus.hと呼ばれるヘッダファイルを持っています10秒ごとの状態。これは私の試みです:列挙型と構造体のコール

AgentStatus s1; 
s1.statusInfo = 0; 
while(1){ 
    std::cout<<"scanner status = "<<s1.statusInfo<<std::endl; 
    usleep(1000000); 
} 

私は取得していますエラーは、このです:

error: invalid conversion from ‘int’ to ‘State’ [fpermissive] 
s1.statusInfo = 0; 

私は状態の列挙型のもののいずれかの値に私の構造体を設定できますか?

+6

enumを定義しました。なぜあなたは 's1.statusInfo = 0;'の代わりに 's1.statusInfo = OFFLINE;'を書かないのですか? C++コンパイラに関しては、特定の値(列挙型の値)を持つ型を定義しており、その型を使用することを期待しています。それが列挙型の仕組みです。 – lurker

+0

static_castを使用する必要があります – bigahega

+0

1つの要素だけを含む構造体を定義するのはなぜですか?あなたは、構造に魅了されていますか?ちょっとしたスカラー状態を使ってください! –

答えて

3

Stateから数字に暗黙的に変換できますが、数字からStateに変換することはできません。

あなたが定義されている

s1.statusInfo = OFFLINE; 

または

s1.statusInfo = static_cast<State>(0); 
0

のいずれかをお試しください:

enum State { 
    OFFLINE = 0, 
    ONLINE = 1, 
    ... 
}; 

をしかし、あなたが実行します。

s1.statusInfo = 0; 
キャストを必要とする3210

は、あなたが/(読みやすさ、メンテナンス...)これを行うことによって、しかし、それを避ける必要がありますすることができます

s1.statusInfo = OFFLINE; 

最小例:

enum State { 
    OFFLINE = 0, 
    ONLINE = 1, 
}; 

struct AgentStatus { 
    State statusInfo; 
}; 

int main() { 
    AgentStatus s1; 
    s1.statusInfo = OFFLINE; 
    return 0; 
} 

コンパイル:

C02QT2UBFVH6-lm:~ gsamaras$ g++ -Wall main.cpp 
C02QT2UBFVH6-lm:~ gsamaras$ 
関連する問題