構造体の構造体の構造体をまとめて初期化したい
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' で異なっています。(複数)
・初期化子の数が多すぎます。
と出ます。
長くなりましたが、わかる方がいましたら、よろしくお願いします。
お礼
struct tfield **headで宣言し ↓ここを ------------------------------- for(i=0;i<6;i++){ /*無意味な構造体*/ head[i]->left[0]=head[i]->right[0]=head[i]=talloc(); printf("head[0]->left[%d]=%p\n",i,&head[0]->left[i]); } ------------------------------- ここに for(i=0;i<6;i++){ Newx(head,276,struct tfield*); Newx(head[i],4,struct tfield); printf("head[%d]->left[0]=%p\n",i,&head[i]->left[0]); } ------------------------------- 差し替えたら上手くいきました。 これが非常に参考になりました。 >sizeof(struct tfield) = 276 >sizeof(struct tfield *) = 4 > >struct tfield *p,*head[30];→head[30]でないとメモリに>収まりません。 ちなみに、もしよろしかったら sizeof(struct tfield) = 276 なぜ276になるのか、参考までに聞きたいんですが。 ここまでに費やした時間は一ヶ月は掛かりました。 参考URL: http://perldoc.jp/docs/perl/5.14.1/perlguts.pod http://perldoc.jp/docs/perl/5.8.8/perlxs.pod http://d.hatena.ne.jp/ksmemo/20081221/p2 http://webcache.googleusercontent.com/search?q=cache:r3wTvquG5M0J:d.hatena.ne.jp/unau/20100127/1264555111+Perl+PVMG&cd=2&hl=ja&ct=clnk&gl=jp&lr=lang_ja http://d.hatena.ne.jp/hiratara/20080625/1214389654 http://www.gadgety.net/shin/tips/unix/perl.html http://webcache.googleusercontent.com/search?q=cache:gHClOI99o7gJ:www.perlmonks.org/%3Fnode_id%3D894139+Perl+%22Newx%22&cd=4&hl=ja&ct=clnk&gl=jp 動画: http://www.nicovideo.jp/watch/sm8619094?via=thumb_watch 目を通した所 http://webcache.googleusercontent.com/search?q=cache:2N3D9rH1ahAJ:perl.g.hatena.ne.jp/bosh/20090809+Perl+mg_find&cd=2&hl=ja&ct=clnk&gl=jp http://perldoc.jp/docs/perl/5.14.1/perlcall.pod http://d.hatena.ne.jp/perlcodesample/20100824/1278596435 http://d.hatena.ne.jp/syohex/20110929/1317308531 http://webcache.googleusercontent.com/search?q=cache:UYBHOxwfedEJ:d.hatena.ne.jp/gfx/20090627/1246087813+Perl+HV*+%E5%8F%82%E7%85%A7&cd=11&hl=ja&ct=clnk&gl=jp http://webcache.googleusercontent.com/search?q=cache:_5o3ifh1WMcJ:perldoc.jp/docs/perl/5.6.1/perldiag.pod+Can't+coerce+HASH+to+integer+in+subroutine+entry+at&cd=1&hl=ja&ct=clnk&gl=jp&lr=lang_ja http://webcache.googleusercontent.com/search?q=cache:urAp6fFxifoJ:en.sourceforge.jp/projects/perldocjp/lists/archive/cvs/2012-August/001522.html+sv_magic&cd=15&hl=ja&ct=clnk&gl=jp&lr=lang_ja http://d.hatena.ne.jp/gfx/20090204/1233725975 http://cpansearch.perl.org/src/RURBAN/illguts-0.35/index.html#svpv http://webcache.googleusercontent.com/