2017-07-20 16 views
0

私のプログラムでは、プログラムのロジックを管理するために、#defineディレクティブで定義された定数を使用します。同時に、これらの値の1つを印刷する必要がある場合、これらの数値を文字列でマップする方法が必要です。文字列の配列を定義し、その値をC++のヘッダーファイルに設定する方法は?

ヘッダファイル:header.hpp

#ifndef HEADER_HPP 
#define HEADER_HPP 

#include <string> 

#define CODE_0 0 
#define CODE_1 1 
#define CODE_2 2 
#define CODE_3 3 

std::string label[4]; 
label[CODE_0] = "label0"; 
label[CODE_1] = "label1"; 
label[CODE_2] = "label2"; 
label[CODE_3] = "label3"; 

#endif /* HEADER_HPP */ 

主な機能:source.cpp

#include "header.hpp" 
#include <iostream> 

int main() 
{ 
    std::cout << "Start" << std::endl; 
    std::cout << "Code #" << CODE_1 << " has label '" << label[CODE_1] << "'" << std::endl; 
    std::cout << "End" << std::endl; 

    return 0; 
} 

しかし、これは動作しません。ここ

は私がしようとしてるものの簡易版です。コンパイラの出力は次のとおりです。

In file included from source.cpp:1:0: 
header.hpp:12:1: error: 'label' does not name a type 
label[CODE_0] = "label0"; 
^ 
header.hpp:13:1: error: 'label' does not name a type 
label[CODE_1] = "label1"; 
^ 
header.hpp:14:1: error: 'label' does not name a type 
label[CODE_2] = "label2"; 
^ 
header.hpp:15:1: error: 'label' does not name a type 
label[CODE_3] = "label3"; 
^ 

なぜこれが起こっているのか分かりません。これは、配列の値を設定する方法ではないようです。正しい方法は何でしょうか?

また、これは異なる質問ですが、これらの定数値をそれぞれの文字列にマップするにはどうすればよいでしょうか?私はそれらを定数(数値と文字列の両方)にするつもりであることに注意してください。

答えて

1

あなたは、明示的な代入文なしでヘッダファイルにこの配列を初期化することができます

std::string label[4] = 
{ 
    "label0" 
, "label1" 
, "label2" 
, "label3" 
}; 

より良いアプローチは、そのクラスの静的変数にするとのcppファイルに定義し、完全に、あるいは少なくともそれを取り除くことであろう。また、#define CODE_0のマクロを列挙子に置き換える方が良いでしょう。

関連する問題