dポイントプレゼントキャンペーン実施中!

MinGWとgccでプログラムを組んでいます(OSはWin7です)。

main.cpp、variable.h、function.hの3つのファイルからなり、
variable.hで自己参照構造体とそれのtypedef宣言をしています。
以下のような感じです。

*************************
typedef struct hoge HOGE;

struct hoge{
int a,b;
double x,y;
HOGE *p1, *p2;
}
*************************

そのあとfunction.hでこのHOGE型のポインタを受ける関数を宣言しています。
void hogehoge(HOGE *p1, HOGE *p2);

これをmain.cpp内で、variable.h、function.hの順に読み込んでいます。
そして、コンパイルエラーがでます。

error: unknown type name 'HOGE'(これがずらっと)

typedefのスコープの関係なのか、それ以外の問題なのか。
煮詰まっています。アドバイスお願いいたします。m(_ _)m

A 回答 (6件)

ここにある情報だけではエラーを出せていないので, そのエラーが出る簡単な例を見せてもらえませんか?

    • good
    • 0

インクルードガードを失敗しているということはないですか?


#ifndef VARIABLE_H
..
と書くところを
#ifdef VARIABLE_H
..
と書いているとか
    • good
    • 0

>それはさすがに知ってますよ。


>関数の宣言部分と本体部分の引数の箇所でエラーが出てます。

知ってるなら、なぜそのエラーメッセージも一緒に書かないんでしょうか。
エラーメッセージから抜粋したつもりになった情報(「コンパイルエラーがでます」とかは抜粋ですらない)を書かれるより、エラーメッセージそのものを書かれた方が有用な事は多いです。
    • good
    • 0

あ, そうだ.



エラーメッセージには「そのエラーがどのファイルの何行目で見つかったのか」が書いてあるんだけど, 知ってました?

この回答への補足

それはさすがに知ってますよ。
関数の宣言部分と本体部分の引数の箇所でエラーが出てます。

補足日時:2012/11/03 17:07
    • good
    • 0

はっきり言って, 何ら参考にならない.



手元で
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;
}

として確かめたけど, そんなエラーは出なかった.
    • good
    • 0

これだけだと何が悪いかわからんので, それぞれのファイルの中で関係する部分をもっと出してもらえませんか?



あと, セミコロンがないのはなぜ?

この回答への補足

セミコロンは書き忘れでした(ソースコードにはあります)
それと、それぞれの関連する部分といってもこれくらいなんです。

・3つのファイルをmain.cppにまとめるとエラーは出なくなります。
・HOGE *pをstruct hoge *pにしてもエラーは消えました(その代わり警告が出ましたが)
・variable.hをmain.cppに移動すると、『'HOGE' was not declared in this scope』とでます。

これで参考になりませんでしょうか。

補足日時:2012/11/03 15:57
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!