エラーLNK2001

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
BAZZ

エラーLNK2001

#1

投稿記事 by BAZZ » 18年前

main.obj : error LNK2001: 外部シンボル ""unsigned int count" (?count@@3IA)" は未解決です。
ball.obj : error LNK2001: 外部シンボル ""struct chara ball" (?ball@@3Uchara@@A)" は未解決です。
laser.obj : error LNK2001: 外部シンボル ""struct chara ball" (?ball@@3Uchara@@A)" は未解決です。
init.obj : error LNK2001: 外部シンボル ""struct chara ball" (?ball@@3Uchara@@A)" は未解決です。
graph.obj : error LNK2001: 外部シンボル ""struct chara ball" (?ball@@3Uchara@@A)" は未解決です。
enemy.obj : error LNK2001: 外部シンボル ""struct chara enemy" (?enemy@@3Uchara@@A)" は未解決です。
laser.obj : error LNK2001: 外部シンボル ""struct chara enemy" (?enemy@@3Uchara@@A)" は未解決です。
init.obj : error LNK2001: 外部シンボル ""struct chara enemy" (?enemy@@3Uchara@@A)" は未解決です。
graph.obj : error LNK2001: 外部シンボル ""struct chara enemy" (?enemy@@3Uchara@@A)" は未解決です。
laser.obj : error LNK2001: 外部シンボル ""struct chara laser1" (?laser1@@3Uchara@@A)" は未解決です。
init.obj : error LNK2001: 外部シンボル ""struct chara laser1" (?laser1@@3Uchara@@A)" は未解決です。
graph.obj : error LNK2001: 外部シンボル ""struct chara laser1" (?laser1@@3Uchara@@A)" は未解決です。
laser.obj : error LNK2001: 外部シンボル ""unsigned int time" (?time@@3IA)" は未解決です。
laser.obj : error LNK2001: 外部シンボル ""struct chara * laser" (?laser@@3PAUchara@@A)" は未解決です。

こんなのが死ぬほど出てくるのですが・・・
これはなんなんですか??w
前も同じような症状になって何かしてたら直ってたと思ったのですが
治し方忘れてしまって困りました。。。。

分割コンパイルしようとしてたら急に出てきたんですが
これの対処法はどうしたらいいんでしょう。

ヘッダファイルで変数をextern宣言したときは
どうすればよいのでしょうか??

kwsk教えてください
よろしくお願いします

box

Re:エラーLNK2001

#2

投稿記事 by box » 18年前

> main.obj : error LNK2001: 外部シンボル ""unsigned int count" (?count@@3IA)" は未解決です。

変数countの実体を、main.c以外のファイルで定義してあると思います。
どんな風に定義してありますか?

以下の同じ種類のエラーについても、同じように調べてみてください。

> ヘッダファイルで変数をextern宣言したときは
> どうすればよいのでしょうか??

externは、「どこか別のファイルで実体を定義した変数をこっちのファイルで使う」という意味です。
どこか一ヶ所で、実体を定義する必要があります。

例えば、main.c で int 型の変数 hoge の実体を定義して、それを他のファイル(sub.c)で使うときは、
こんな方法があると思います。

【main.c】
#define MAIN
#include "externs.h"
// MAIN を define しているので、EXTERN が無効となり、hoge の実体を定義する

【sub.c】
#include "externs.h"
// MAIN を define していないので、EXTERN が extern に置き換わり、main.c で定義した hoge の実体を参照する

【externs.h】
#ifndef __EXTERNS_H // 多重インクルードの防止
#define __EXTERNS_H
#ifdef MAIN
#define EXTERN /* 何もしない */
#else
#define EXTERN extern
#endif /* MAIN */
EXTERN int hoge;
#endif /* !__EXTERNS_H */


> kwsk教えてください

kwskって何ですか?「詳しく」の省略記法か何かですか?

BAZZ

Re:エラーLNK2001

#3

投稿記事 by BAZZ » 18年前

返信遅くなってすいません

なるほど
やっと意味がわかりました

だからヘッダファイルでextern宣言して、
それをインクルードすると他のファイルで使われている変数が使えるのですか

Dixqさまがhファイルをインクルードするってことは
hファイルをインクルードした場所にhファイルのソースがそのまんまかかれるみたいなものだと
おっしゃってましたし

自己解決しました
ありがとうございましたm(__)m

閉鎖

“C言語何でも質問掲示板” へ戻る