2017-11-11 14 views
0

私は構造体の定数配列を作成する方法を探しています。 私はこの1つ(ヘッダファイル内it'a)試してみました:構造体のconst配列を作成する方法は?

//#pragma once 
#ifndef __CANDY_DB_H__ 
#define __CANDY_DB_H__ 

#include <stdbool.h> 
#include <string.h> 

typedef struct Candy { 
    char Name[16]; 
    bool Vegan; 
}Candies; 

const Candies first = {"Apple",true}; 

const Candies second = ("Popcorn", true); 

const Candies CandiesArray[2] = { first, second }; 

#endif //__CANDY_DB_H__ 

をしかし、間違っているようです。

それを行うための最善の方法は何ですか?

+1

ダブルアンダースコアまたはアンダースコアと大文字で始まる名前を発明しないでください。それらは「実装」用に予約されています。はい、システムヘッダーは表記法を使用します。彼らはそうする必要があります。あなたは、実装に干渉することができ、または実装によって混乱する可能性があるので、あなたはそれをするべきではありません。 –

答えて

1

問題はCandiesArrayそれは定数式によって初期化されなければならない静的記憶域期間を持つオブジェクトを表すことを意味する(任意の関数外)ファイルスコープで宣言されていることです。 C++とは異なり、C firstは、const修飾子にもかかわらず、定数式ではありません。

この状況を改善するために、あなたが直接intitializer内の要素を置くかもしれません:

const Candies CandiesArray[2] = { 
    {"Apple", true}, 
    {"Popcorn", true} 
}; 
+0

すばらしい、ありがとう!同じプロジェクト内の別のCファイルでこの定数を使用するにはどうすればよいですか? –

+0

@s_s:通常の方法は、ヘッダ内の配列を_declare_し、そのソースファイル内に_define_を配置することです。例えば、キャンディーズのCandiesArray [];を 'candy_db.h'に、' constキャンディーズCandiesArray [2] = {...} 'を' candy_db.c'(これはヘッダを含む必要があります)最初は)。次に、 'candy_db.h'ヘッダをインクルードして他のファイルで' CandiesArray'を使用することができます。 –

+0

それは動作します、ありがとう! –

関連する問題