- ベストアンサー
自己参照構造体のtypedef宣言とスコープ
- MinGWとgccでプログラムを組んでいます(OSはWin7です)。main.cpp、variable.h、function.hの3つのファイルからなり、variable.hで自己参照構造体とそれのtypedef宣言をしています。その後、function.hでこのHOGE型のポインタを受ける関数を宣言しています。しかし、main.cpp内で読み込み順にvariable.h、function.hを読み込んだ後にコンパイルエラーが発生してしまいます。
- typedefのスコープの関係なのか、それ以外の問題なのか分からずに困っています。どなたかアドバイスをいただけないでしょうか。
- この問題に関して煮詰まっているため、助言や解決策を求めています。どうかよろしくお願いいたします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
ここにある情報だけではエラーを出せていないので, そのエラーが出る簡単な例を見せてもらえませんか?
その他の回答 (5)
- colder
- ベストアンサー率43% (30/69)
インクルードガードを失敗しているということはないですか? #ifndef VARIABLE_H .. と書くところを #ifdef VARIABLE_H .. と書いているとか
- wormhole
- ベストアンサー率28% (1626/5665)
>それはさすがに知ってますよ。 >関数の宣言部分と本体部分の引数の箇所でエラーが出てます。 知ってるなら、なぜそのエラーメッセージも一緒に書かないんでしょうか。 エラーメッセージから抜粋したつもりになった情報(「コンパイルエラーがでます」とかは抜粋ですらない)を書かれるより、エラーメッセージそのものを書かれた方が有用な事は多いです。
- Tacosan
- ベストアンサー率23% (3656/15482)
あ, そうだ. エラーメッセージには「そのエラーがどのファイルの何行目で見つかったのか」が書いてあるんだけど, 知ってました?
- Tacosan
- ベストアンサー率23% (3656/15482)
はっきり言って, 何ら参考にならない. 手元で variable.h typedef struct hoge HOGE; struct hoge{ int a,b; double x,y; HOGE *p1, *p2; }; function.h void hogehoge(HOGE *p1, HOGE *p2); main.cpp #include "variable.h" #include "function.h" int main() { hogehoge(0, 0); return 0; } として確かめたけど, そんなエラーは出なかった.
- Tacosan
- ベストアンサー率23% (3656/15482)
これだけだと何が悪いかわからんので, それぞれのファイルの中で関係する部分をもっと出してもらえませんか? あと, セミコロンがないのはなぜ?
補足
セミコロンは書き忘れでした(ソースコードにはあります) それと、それぞれの関連する部分といってもこれくらいなんです。 ・3つのファイルをmain.cppにまとめるとエラーは出なくなります。 ・HOGE *pをstruct hoge *pにしてもエラーは消えました(その代わり警告が出ましたが) ・variable.hをmain.cppに移動すると、『'HOGE' was not declared in this scope』とでます。 これで参考になりませんでしょうか。
補足
それはさすがに知ってますよ。 関数の宣言部分と本体部分の引数の箇所でエラーが出てます。