こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

自己参照構造体のtypedef宣言とスコープ

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

投稿日時 - 2012-11-03 15:20:41

QNo.7779705

すぐに回答ほしいです

質問者が選んだベストアンサー

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

投稿日時 - 2012-11-04 01:32:41

ANo.5

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.6

インクルードガードを失敗しているということはないですか?
#ifndef VARIABLE_H
..
と書くところを
#ifdef VARIABLE_H
..
と書いているとか

投稿日時 - 2012-11-05 23:53:44

ANo.4

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

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

投稿日時 - 2012-11-03 17:56:21

ANo.3

あ, そうだ.

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

投稿日時 - 2012-11-03 16:49:11

補足

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

投稿日時 - 2012-11-03 17:07:32

ANo.2

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

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

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

投稿日時 - 2012-11-03 16:34:16

ANo.1

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

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

投稿日時 - 2012-11-03 15:40:30

補足

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

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

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

投稿日時 - 2012-11-03 15:57:45

あなたにオススメの質問