
C言語のコンパイルエラーに関する質問です。
以下のような構造体の中に共用体を作成して、constで初期値を入れておきたいと考えています。
機械に適用する初期パラメータのような感じです。
「初期化子が多すぎます。」というコンパイルエラーがでるのですが、どこが多いのかわかりません。
どう修正すれば良のか教えていただけないでしょうか?
// 構造体定義
typedef struct {
Uint16_t time;
Uint8_t mode;
Uint16_t xxxx;
Uint16_t zzzz;
}PrgPatternA_t;
typedef struct {
Uint16_t time;
Uint8_t mode;
Uint16_t yyyy;
}PrgPatternB_t;
typedef struct {
Uint8_t pattern;
union {
PrgPatternA_t param_a[3];
PrgPatternB_t param_b[2];
}param;
} Program_t;
// 変数定義
EsCourseProgram_t ES_COURSE_PROG_DATA = {
PATTERN_A,
{ // Aパターン
// time mode xxxx yyyy
{ 10, MODE_A, 100, 50},
{ 10, MODE_A, 100, 50},
{ 10, MODE_A, 100, 50}
}
}
No.2ベストアンサー
- 回答日時:
どの初期値がどのメンバーに対応するかをじっと見ていくと, {} が 1つ足らない. つまり初期化子は
{
PATTERN_A,
{ // Aパターン
// time mode xxxx yyyy
{
{ 10, MODE_A, 100, 50},
{ 10, MODE_A, 100, 50},
{ 10, MODE_A, 100, 50}
}
}
}
でないといけない.
どこかの {} を忘れていたんだと思う. 共用体を初期化するときの {} かなぁ?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# プログラムが書けません。 4 2023/01/22 22:57
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- フランス語 フランス語文章の構造について質問 1 2022/08/24 18:02
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/10 14:24
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- 数学 Pythonのspecgramに関する質問です。 1 2022/12/04 19:18
- 数学 モデルのパラメータの定義がいまいちわかりません。 3 2022/10/11 15:16
このQ&Aを見た人はこんなQ&Aも見ています
-
C言語初心者の質問失礼します。
C言語・C++・C#
-
【gcc・cygwin】multiple definitionエラーの解決法
C言語・C++・C#
-
HEWを使用しているのですが、このようなエラーが出ました。
C言語・C++・C#
-
-
4
charでの計算?
C言語・C++・C#
-
5
配列を含む構造体の初期値について
C言語・C++・C#
-
6
C言語のポインタに直接アドレスを割り振りしたい
C言語・C++・C#
-
7
変数の前のビックリマークについて!
PHP
-
8
エクセルのデータグループ化の際に貼り付けた図だけ一緒に折りたたんでくれません!
Windows Vista・XP
-
9
C言語のポインターに関する警告
C言語・C++・C#
-
10
変数の値が勝手に変化する原因
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで変数定義を変更する方法
-
ビット演算について
-
C++でデータの途中から読み込み
-
16進数のバイト数
-
FORTRANのCOMMONについて
-
#pragmaについて
-
Schemeのコンストラクタの引数は?
-
この型変換の内容がわかりませ...
-
errorC2228 CColorDialog
-
C++変数宣言時のコンストラクタ...
-
C言語のプログラムの流れについて
-
ExcelVBAで初期値のセット
-
メッセージキュー
-
デフォルトコンストラクタで分...
-
「 VBA の 宣言 」 がない場合...
-
変数の初期化について
-
整数から16進数への変換 現在c...
-
Pythonです。 monster ballを定...
-
VBAのプログラムで、DIAG = 1# ...
-
文字列の検索&排除をするプロ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのプログラムで、DIAG = 1# ...
-
Integer変数をカラにしたいので...
-
「#undef」と「#define」の使い...
-
C言語 構造体の中に共用体を定...
-
構造体のデータを丸ごとコピー...
-
VBAの変数のデータ型を変更する...
-
日付チェック関数について
-
整数から16進数への変換 現在c...
-
typedefをプログラム中で解除す...
-
値が代入されてない時
-
C++ 構造体の一括初期化 {0}
-
VBAで符号無し整数
-
long型のデータをバイト型の配...
-
変数の初期化について
-
1バイトデータの読み出しについて
-
charとucharの違い
-
VBAにてcolorindexを変数に格納...
-
異なる構造体のデータのコピー
-
構造体を型の異なる構造体に代入
-
構造体にする理由・利点・使用例
おすすめ情報
すみません、間違えました。
EsCourseProgram_t → Program_t
と置き換えていただけると助かります。
アドバイスありがとうございます。
最後の}は、実際は付けてコンパイルしております。(質問文には抜けていました。)
相変わらず矢印行で、「Too many initializer values.」というエラーが発生してしまいます。
unionとstructの使い方がそもそも間違っているのかと思っていましたが、やはり初期化の仕方が悪いのでしょうか?
Program_t PROG_DATA = {
0,
{ // Aパターン
// time mode xxxx yyyy
{ 10, 0, 100, 50},
{ 10, 0, 100, 50}, ←←←←←←←
{ 10, 0, 100, 50}
}
}
もしかして、unionで配列を定義してもリザーブされる領域は、添字数分ではなく、配列の1個分なのでしょうか?だから、配列3つ分で初期化しようとしているので、多すぎると言われている。
そうすると納得できます。もしご存知でしたら教えてください。
自己解決いたしました。
共用される部分は、PrgPatternA_tのサイズなので、配列は無効になっていました。ご回答くださいありがとうございました。