- ベストアンサー
クラス内の構造体の実体化とアクセス方法が・・
クラス内の構造体の実体化とアクセス方法が解らなくて困っていまし。 ヘッダーで class data { public: struct SET_A { int time; char name[24]; }; }; と宣言したクラス内の構造体を使いたくて data::SET_A dataseta; dataseta.time = 1; などとしても構文エラーになってしまいます。 クラス内の構造体はどう実体化してアクセスしたりすれば良いのでしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
関連するQ&A
- 構造体の宣言方法について
構造体の宣言で ヘッダーファイルに struct RAM rom_AAA[20] を宣言 Cソースファイル(上記のヘッダーファイルをインクルードする)に struct RAM { struct BBB *CCC } を宣言 とした時 rom_AAA[20]と*CCC(BBBアドレス)はリンクしてる状態になるのでしょうか? 構造体の一部の定数テーブルを参照するために 間単にポインタ使ってグルグル回したいのですが、同じものをアクセスしてる事にならないでしょうか?
- ベストアンサー
- C・C++・C#
- C言語の文字列を含んだ構造体
下記のサイトに構造体のことが書かれています。 http://www.isl.ne.jp/pcsp/beginC/C_Language_14.html その中の (3)構造体の初期化 の記述で //構造体の型宣言 struct student{ int no; // 学籍番号 char name[256]; // 氏名 int year; // 学年 char student_class[256]; // クラス }; と書かれています。 次の(4)構造体のデータ参照では、 //構造体の型宣言 struct OLD{ int no; //番号 char *name; //名前 int s_year; //年 char s_class; //クラス }; と書かれています。 ここで質問です。 前者の名前は char name[256] ですが、 後者の名前は char *name になっています。 name[256] と *name では何が違うのでしょうか? どういうときに使い分けるのでしょうか?
- ベストアンサー
- C・C++・C#
- 構造体の構造体の構造体をまとめて初期化したい
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' で異なっています。(複数) ・初期化子の数が多すぎます。 と出ます。 長くなりましたが、わかる方がいましたら、よろしくお願いします。
- ベストアンサー
- C・C++・C#
- 条件によって構造体のリスト構造を変えたい
こんにちは。 C(C++)で構造体を使っているのですが、まだまだ未熟で使い方が良く分かりません。以下のことを実施したいのですが、やり方をどなたかご教授頂けませんでしょうか。よろしくお願いします。 条件によって構造体のリスト構造を変えたいのです。 例えば、 条件1の場合は 構造体a→構造体b 条件2の場合は、 構造体a→構造体c 上記のようにです。そして構造体のルートから参照先をたどっていくことで、配下の構造体の値を取得したいのです。 文法上許されないようですが、イメージとしては、 struct a aa; aa.c->b.aa ということをしたいのです。よろしくお願いします。 struct a{ char a; char b; struct c; : }; struct b{ char aa; : }; struct c{ : : };
- ベストアンサー
- C・C++・C#
- 構造体を引数とする、クラス間のデータの受渡し方法について
現在、C++の構造体を理解しようと努めていますが、どうしても理解できない点があり、 なにとぞ、ご指導・ご助言のほどよろしくお願い致します。 1.質問内容 a.構造体を引数とする、クラス間のデータの受渡し方法について ・主プロ(主クラス)側の構造体のメンバ変数を、サブプロ(サブクラス)側で更新するのに、 メンバ変数を一つずつ引数として渡せば、正しく更新できるのですが、構造体を引数として渡すと コンパイルエラーになります。 ・どのように定義すれ場良いのかをご助言お願い致します。 2.プログラムの内容を簡単に記載します。 全部を記載する事は出来ないので、一部を省略して簡単に必要な所だけを記載します。 a.Main.cpp int main() { CMain main; CSub sub; //Main_Classの関数に、Sub_Classクラスのポインタを引数として渡し、Sub_Classクラスの関数を呼び出す main.Main_FuncCall(&sub); return 0; } b.CMain_Class.h class CMain { public: //コンストラクタ 省略 //デストラクタ 省略 typedef struct CHAR1 { int m_chx; int m_chy; bool m_chValidFlag; }; CHAR1 *pc; //データの受け渡し(ポインタ) void Main_FuncCall( CSub* cs ); }; c.CMain_Class.cpp void CMain::Main_FuncCall( CSub* cs ) { //メインクラスの構造体を引数として、サブクラスの関数を呼び出す //サブプロ側の構造体を更新する cs->Sub_FuncCall4( pc ); } d.CSub_Class.h class CSub { public: //コンストラクタ 省略 //デストラクタ 省略 typedef struct CHAR_S { int m_chx; int m_chy; bool m_chValidFlag; }; CHAR_S *ps; void Sub_FuncCall( CHAR_S *pc ); }; e.CSub_Class.cpp void CSub::Sub_FuncCall( CHAR_S *pc ) { pc[1].m_chx += ps[1].m_chx; } 3.コンパイルする a. cs->Sub_FuncCall4( pc ); -> 1 番目の引数を 'struct CMain::CHAR1 *' から 'struct CSub::CHAR_S *' に変換できません。 (新しい機能 ; ヘルプを参照) 指示された型は関連がありません; 変換には reinterpret_cast、 C スタイル キャストまたは関数スタイルのキャストが必要です。 b.色々と試してみましたが、現在の私の知識ではコンパイルができません。 アドバイスのほど、よろしくお願いします。
- ベストアンサー
- C・C++・C#
- 構造体について
凄く初歩的な質問で申し訳ありませんが… 入門書の構造体のところで 以下のようなプログラムの例がありました。 #include <stdio.h> struct seiseki { /* 構造体の宣言 */ int no; char name[20]; double average; }; int main(void) { int i; struct seiseki seito1, seito2[20]; /* 構造体変数と構造体配列の宣言 */ >char name[20] というのは、NAMEの領域を20文字 確保すると言うことですよね? >struct seiseki seito1, seito2[20] ここの箇所が分からないのですが seito2[20]の20というのは どうして20なのですか? NAMEだけではないので もっと大きな数字になるような気がするのですが… またseito1の方は どうして数字が何もないんですか? 考え違いをしているところを ご指摘して頂ければ幸いです。
- ベストアンサー
- C・C++・C#
- 構造体から他の構造体への代入
現在C言語で簡単なプログラミングを書いているのですが、 構造体(1)(下記参照)から、構造体(2)(下記参照)への代入の方法がわからず悩んでいます。もしよければ手を貸してください!! 標準関数などがないということはわかったので、 地道に代入を行いたいです。 イメージ・・・(data[n].b = moji[n].d;) (1)struct list_kouzou{ int a; char b[30]; char c[8]; }data[100]; (2)struct list_tai{ char d[30]; }moji[15];
- ベストアンサー
- C・C++・C#
- 構造体のポインタにNULLが入らない
typedef struct tag{ int number; char name[10]; struct tag *next; }DATA; という構造体があって、 DATA *p; と宣言し、 p->next == NULL; とすることはできないんですか? セグメンテーション違反になってしまうのですが。 pが指すnextにNULLを入れるにはどうしたらいいのでしょうか?
- ベストアンサー
- C・C++・C#
お礼
すみません、解決しました; 寝不足で「関数の中で走らせてる」つもりが 「構造体の宣言の中」に書いてしまってました・・・ ちゃんと動いてくれました、本当にすみませんでした・・! ありがとうございました~っ orz
補足
ご回答ありがとうございます。 この様なエラーが出ます。 error C2143: 構文エラー : ';' が '.' の前にありません。 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません error C2238: ';' の前に無効なトークンがあります。 実体化しようとしている data::SET_A dataseta; dataseta.time = 1; ここを削ればコンパイル~実行が正しく行われるので 問題が有るのはこの2行だと思うのですが・・ 宜しくお願いします orz