![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
ちなみに、構造体へのポインタの宣言であれば、単に
extern struct A *a;
とするだけで済みます。
ただし、構造体の中身にアクセスするのであれば、完全な構造体の定義が必要になります。
回答ありがとうございます。
ポインタの宣言ではないのです><
今、main.c、sansho.c、touroku.c、sansho.h、touroku.hというのがあるんです。
で、main.cにはsansho.h、touroku.hをインクルードしていて、sansho.cにはsansho.h、touroku.cにはtouroku.hをインクルードしています。
で、main.cにはsansho.cなども分割ファイルでリンク?みたいになっているので構造体の宣言が重複してるみたいなエラーが出ちゃうんです><
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_04.png?e8efa67)
No.3
- 回答日時:
まず、char や int は extern できているということで。
char や int はC言語が持っている型なので、
extern char hoge;
とすると、コンパイラには理解できます。
しかし、構造体の場合は、どういう構造なのか、コンパイラに教えてあげないと、コンパイラが理解できないというのが、答えになります。
ですから、ヘッダファイルで、
struct hogeType{
int a;
int b:
char c[100];
};
などと書くことで、(この場合は)hogeType という構造体を定義したことと、その具体的な構造をコンパイラに伝えます。(もちろん、hogeType でなくても、わかりやすい名前で)
これで、コンパイラが、struct hogeType という型を理解したと考えておおむねOKです。
あとは、この構造体を使うところで、このヘッダファイルを include すれば、他の char や int と同じように、 struct hogeType を使うことができます。
struct hogeType hoge; // 実体の定義
extern struct hogeType hoge; // 外部定義の参照
struct hogeType func(struct hogeType a);
// 構造体を引数にして、構造体を返す関数
などなど。
あと、struct hogeType というのを、簡略化して、struct なしですませようとする場合には、typedef を使います。
C++では、(typedef しなくても)struct 無しでもOKです。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_13.png?e8efa67)
No.2
- 回答日時:
申し訳ない。
C言語でしたね。先の例は、下記の *何れか* に変更してもらわないと、コンパイルできないと思います。
--
変更パターン(1):
a.c, b.c の
X_t x;
を
struct X_t x;
に変更
--
変更パターン(2):
x.h の
struct X_t {...};
を
typedef struct {...} X_t;
に変更
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_13.png?e8efa67)
No.1
- 回答日時:
構造体も extern 出来ますよ(正確には、構造体の実体も char や int (の実体)と同様に extern 出来ます)。
## 構造体を定義することと、extern を記述することは事は次元の異なることです。
例ですが、
== x.h
struct X_t
{
int a;
char b;
};
== a.c
#include "x.h"
void foo()
{
X_t x;
: (処理)
}
== b.c
#include "x.h"
void bar()
{
X_t x;
: (処理)
}
--
って感じでしょうか??
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラムが書けません。 4 2023/01/22 22:57
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- その他(IT・Webサービス) ホームページにカウント数を表示する 2 2022/10/28 10:37
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- C言語・C++・C# C言語のファイル入力が分かりません 2 2022/05/22 06:35
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- C言語・C++・C# C言語 2 2022/07/21 00:02
- C言語・C++・C# 100バイトのバイナリファイルを読み込んで別のファイルに書き込みたいのですが、型をどうすればいいのか 1 2022/11/03 17:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ソフトの開発言語を調べる方法
-
unsigned long long 型のフォー...
-
cc と gcc の違い
-
COBOLの論理演算子について質問...
-
C言語はC言語でできている?
-
パーサとコンパイラの違いって?
-
COBOLの論理演算子について
-
組み込みソフト。ROM領域にデータ
-
COBOLのALPHABET...
-
リンカのバージョンってどうや...
-
C言語:OS移行時の注意点(Sola...
-
C言語の関数の中身のソースコー...
-
最初に使う変数のゼロクリアに...
-
プログラミングの字句解析につ...
-
python エラー
-
エクセルのエラーメッセージ「4...
-
アプリケーションのDLLファイル...
-
Excelのエラーで困ってます。
-
<unistd.h>をVisualStudioでつ...
-
適切な変換関数が存在しない???
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
unsigned long long 型のフォー...
-
ソフトの開発言語を調べる方法
-
cc と gcc の違い
-
printfなど、標準関数のソース...
-
パーサとコンパイラの違いって?
-
COBOLのALPHABET...
-
Visual Studio でmakefileを使...
-
組み込みソフト。ROM領域にデータ
-
リリースモードとデバッグモー...
-
C++Builder → Visual C++ 移植...
-
C++でデスクトップGUIアプリ開...
-
サイクルカウントの方法
-
VisualC++6.0でのProfessionalE...
-
COBOLの論理演算子について質問...
-
関数形式マクロ dtaは戻り値が...
-
C言語の2進数表記
-
POWERCOBOLのSQL...
-
Σの計算について
-
C言語の規格
-
COBOL計算式の中間ワーク桁数に...
おすすめ情報