gnuplotをCで吐くためのプログラムを作成していますが、
構造体の構造体の構造体をまとめて初期化することができません。
以下がコードそのコードです。
#define MAX_PLOT_DATA_NUM 8
#define MAX_GRAPH_SET_NUM 35
//child --------------------------------------------------
typedef struct {
char *fileName;
int column[2];
char *caption;
} Col;
//child --------------------------------------------------
typedef struct {
char *category;
char *subCategory;
char *xLabel, *yLabel;
char *saveFileName;
Col col[MAX_PLOT_DATA_NUM];
} GraphSet;
//child --------------------------------------------------
typedef struct {
char *lineFormat;
int lineWidth;
} Common;
//mother -------------------------------------------------
typedef struct {
GraphSet gs[MAX_GRAPH_SET_NUM];
Common common;
} PlotFormats;
int main(){
PlotFormats pF = {
{"Motor angle","right","Time [s]","Angle [rad]","ang_R",
{"motor.dat",1,2,"ang #1 "},
{"motor.dat",1,3,"ang #2 "},
{"motor.dat",1,4,"ang #3 "},
{"motor.dat",1,5,"ang #4 "},
{"motor.dat",1,6,"ang #5 "},
{"motor.dat",1,7,"ang #6 "},
},
//ここから下のコメントアウトしてる部分をはずすとコンパイルが通らなくなります。
//{"Motor angle","left","Time [s]","Angle [rad]","ang_L",
//{"motor.dat",1,12,"ang #1 "},
//{"motor.dat",1,13,"ang #2 "},
//{"motor.dat",1,14,"ang #3 "},
//{"motor.dat",1,15,"ang #4 "},
//{"motor.dat",1,16,"ang #5 "},
//{"motor.dat",1,17,"ang #6 "},
//},
{"w l", 5}};
return 0;
}
エラーは
・間接参照のレベルが 'char *' と 'int' で異なっています。(複数)
・初期化子の数が多すぎます。
と出ます。
長くなりましたが、わかる方がいましたら、よろしくお願いします。
No.4ベストアンサー
- 回答日時:
こんなことかな?
#define MAX_PLOT_DATA_NUM (8)
#define MAX_GRAPH_SET_NUM (35)
//child --------------------------------------------------
typedef struct {
char *fileName;
int column[2];
char *caption;
} Col;
//child --------------------------------------------------
typedef struct {
char *category;
char *subCategory;
char *xLabel, *yLabel;
char *saveFileName;
Col col[MAX_PLOT_DATA_NUM];
} GraphSet;
//child --------------------------------------------------
typedef struct {
char *lineFormat;
int lineWidth;
} Common;
//mother -------------------------------------------------
typedef struct {
GraphSet gs[MAX_GRAPH_SET_NUM];
Common common;
} PlotFormats;
int main(void)
{
PlotFormats pF = {
{
{
"category", "subCategory", "xLabel", "yLabel", "saveFilename",
{
{ "fileName", 10, 20, "caption", },
{ "fileName", 10, 20, "caption", },
{ "fileName", 10, 20, "caption", },
},
},
{
"category", "subCategory", "xLabel", "yLabel", "saveFilename",
{
{ "fileName", 10, 20, "caption", },
{ "fileName", 10, 20, "caption", },
},
},
{
"category", "subCategory", "xLabel", "yLabel", "saveFilename",
{
{ "fileName", 10, 20, "caption", },
{ "fileName", 10, 20, "caption", },
{ "fileName", 10, 20, "caption", },
{ "fileName", 10, 20, "caption", },
},
},
},
"lineFormat", 30,
};
return 0;
}
コンパイラのエラーが示すとおり、
構造体への参照レベルが違っていたみたいですね…
本当にありがとうございました。
非常に助かりました。
No.2
- 回答日時:
こういったことがしたいのでしょうか?
配列を使えばよいです。
#define MAX_PLOT_DATA_NUM (8)
#define MAX_GRAPH_SET_NUM (35)
//child --------------------------------------------------
typedef struct {
char *fileName;
int column[2];
char *caption;
} Col;
//child --------------------------------------------------
typedef struct {
char *category;
char *subCategory;
char *xLabel, *yLabel;
char *saveFileName;
Col col[MAX_PLOT_DATA_NUM];
} GraphSet;
//child --------------------------------------------------
typedef struct {
char *lineFormat;
int lineWidth;
} Common;
//mother -------------------------------------------------
typedef struct {
GraphSet gs[MAX_GRAPH_SET_NUM];
Common common;
} PlotFormats;
int main(void)
{
PlotFormats pF[2] = {
{
"category", "subCategory", "xLabel", "yLabel", "saveFilename",
"fileName", 10, 20, "caption",
"lineFormat", 30,
},
{
"category", "subCategory", "xLabel", "yLabel", "saveFilename",
"fileName", 1000, 2000, "caption",
"lineFormat", 3000,
},
};
return 0;
}
No.1
- 回答日時:
あまり自信はありませんが、予想では
#define MAX_PLOT_DATA_NUM 8
に対して、
{"Motor angle","right","Time [s]","Angle [rad]","ang_R",
{"motor.dat",1,2,"ang #1 "},
{"motor.dat",1,3,"ang #2 "},
{"motor.dat",1,4,"ang #3 "},
{"motor.dat",1,5,"ang #4 "},
{"motor.dat",1,6,"ang #5 "},
{"motor.dat",1,7,"ang #6 "},
},
これでは col の要素が6つしかないので、その後のコメントアウトしてある部分を入れようとすると要素の数が合わないのが露呈してしまうのではないでしょうか。
そう仮定してこの構造体がメモリ上に展開された状態をイメージすると、
//ここから下のコメントアウトしてる部分をはずすとコンパイルが通らなくなります。
//{"Motor angle","left","Time [s]","Angle [rad]","ang_L",
と書かれた2番目の要素 "left" の位置は本来ならば int column[2] の場所なので、「間接参照のレベルが 'char *' と 'int' で異なっています。」というエラーメッセージが出ているのだと思います。
解決策ですが、単純に
#define MAX_PLOT_DATA_NUM 6
でどうでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# プログラムが書けません。 4 2023/01/22 22:57
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- MySQL MYSQL エラー 2 2022/10/18 11:37
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
配列をnビットシフトする
-
CStringをwchar_tに変換したい
-
double型の値をchar配列に変換...
-
コンパイルエラー invalid ope...
-
variant型ってどのような仕組み...
-
strchr() の第2引数はなぜ int ...
-
C++ の FileCopy の設定が解り...
-
int main()の・・・
-
_TCHAR*での引数の読み込み
-
c++ 文字列を入力して、一文字...
-
-'0'の意味について
-
コマンドラインに入力されてい...
-
数字文字の出現回数を表示する...
-
文字列がNULLか空文字列かの判定
-
new
-
sprintfに同じ変数は使えるか
-
間接参照のレベルが異なっています
-
charからLPTSTRへの変換方法
-
c言語
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
charでの計算?
-
C言語のfor文です。 繰り返しの...
-
charからLPTSTRへの変換方法
-
文字列から空白を取り除きたい...
-
C言語の入力した文字を反転させ...
-
'const char *' 型は 'char *' ...
-
配列をnビットシフトする
-
str系関数を使わずに二つの文字...
-
int main()の・・・
-
atoi( ) の反対をやりたい
-
CStringをwchar_tに変換したい
-
c++ 文字列を入力して、一文字...
-
switch文で文字を比較すること...
-
干支のプログラム
-
3桁区切(コンマ)記号をつけ...
-
絶対パスからのファイル名の切...
-
間接操作のレベルとは
-
間接参照のレベルが異なっています
-
型変換
おすすめ情報