- ベストアンサー
ヘッダファイルと構造体
typedef struct{ float x; float y; float z; }Point; typedef struct { struct Point p1; struct Point p2; }Rect; とヘッダファイルに入力しコンパイルしてみると struct Point p1; struct Point p2; のPointが未定義の構造体とエラーが出ます。 どのように書けばいいのでしょう??
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
貴方は「Point型の定義」は行っていますが「Point構造体の定義」は行っていません。 例1 typedef struct{ float x; float y; float z; }Point; /* ←これは構造体名ではなく、型名 */ typedef struct { Point p1; /* 型名でメンバを定義 */ Point p2; /* 型名でメンバを定義 */ }Rect; 例2 struct tagPoint { /* ←tagPointは構造体名 */ float x; float y; float z; } typedef struct tagPoint Point; /* ←Pointは構造体名ではなく、型名 */ struct tagRect { Point p1; /* 型名でメンバを定義 */ struct tagPoint p2; /* 構造体名でメンバを定義 */ }; typedef struct tagRect Rect; 因みに「Point」や「Rect」は、Windows GUI環境では「画面などの2Dのデバイスコンテキストの操作用に、既に定義済み」なので、別の名前を使用した方が良いでしょう。「MyPoint」や「MyRect」などのように。
その他の回答 (1)
- notnot
- ベストアンサー率47% (4900/10358)
typedefしたものは、型名なので、 Point p1; Point P2; のように書きます。 structのタグ名を使った書き方と混同してるのでしょう。 参考: typedef struct { float x; } a; a p1; struct aa { float x; }; struct aa p2;
補足
回答ありがとうございます えと、p1,p2には.cのプログラムでxyzの関数の座標がはいるのです。 もし、ヘッダファイルの内容を.cのほうに書くと typedef struct{ float x; float y; float z; }Point; struct Rect{ struct Point p1; struct Point p2; }; これをヘッダファイルに記述したいのですが、先ほど述べたとおり struct Point p1; struct Point p2; のPointが未定義の構造体になるのです。 説明不足ですいません