おはようございます。
プログラム初心者です。よろしくおねがいします。
現在、6つのC言語プログラム(main.c, sub1.c, sub2.c, a.c, b.c, c.c)を作成し、画像のような関係でインクルードして使いたいと思っています。
ですが、main.cをコンパイルしたところ
'a'の宣言が複数見つかった
ひとつ前の'a'の定義位置
'a'の宣言が複数見つかった
ひとつ前の'a'の定義位置
'c'の宣言が複数見つかった
ひとつ前の'c'の定義位置
というエラーが表示されました。
a.cは3回、c.cは2回インクルードしているので、このようなエラーが表示されたのだと予想できましたが、どうしたら解決できるのか、自分なりに調べてみてもわからなかったので質問させていただきます。
OSはwindows7
コンパイラはBorland C++ Compiler 5.5
です。
どうしたらエラーを解決できるでしょうか。
どなたか詳しい方がおられましたら、ご教示お願いいたします。
プログラムのインクルードについて
Re: プログラムのインクルードについて
インクルードするのはヘッダファイルでないのですか?
インクルードガードと言うものがあります。
のようにすれば、多重インクルードは防げます。
#ifndeや#define、#endifはプリプロセッサでググると出てきます。
因みに、C++は
#pragma once
の一行で防げます。
インクルードガードと言うものがあります。
#ifndef DEF_TEST_H //もし、DEF_TEST_Hが定義されてなかったら
#define DEF_TEST_H //定義して
//ここにプログラムを書く。
#endif //終わり
#ifndeや#define、#endifはプリプロセッサでググると出てきます。
因みに、C++は
#pragma once
の一行で防げます。
初心者です
Re: プログラムのインクルードについて
>>3D_3Dさん
返信ありがとうございます。
a.h , c.hは以下のように sub1.h , sub2.h , b.h は以下のように書いてみました。 このような書き方でいいでしょうか。
また、これらのヘッダファイルをインクルードするようプログラムを変更してコンパイルしたところ、
main.c以外では
「外部シンボル'_main'が未解決」
main.cでは
「外部シンボル'_sub1'が未解決」
「外部シンボル'_sub2'が未解決」
というエラーが表示されてしまいました。
どこか、間違っているところを指摘していただけると幸いです。
よろしくおねがいします。
返信ありがとうございます。
a.h , c.hは以下のように sub1.h , sub2.h , b.h は以下のように書いてみました。 このような書き方でいいでしょうか。
また、これらのヘッダファイルをインクルードするようプログラムを変更してコンパイルしたところ、
main.c以外では
「外部シンボル'_main'が未解決」
main.cでは
「外部シンボル'_sub1'が未解決」
「外部シンボル'_sub2'が未解決」
というエラーが表示されてしまいました。
どこか、間違っているところを指摘していただけると幸いです。
よろしくおねがいします。
Re: プログラムのインクルードについて
そうですね。自分なら全部に書いてしまいますけどね。あとあと面倒になりそうなのでw
エラーは、関数の実体が無い時に出るものだと思います。main,sub1,sub2関数の実体はありますか?
あと、開発環境を教えてください。
エラーは、関数の実体が無い時に出るものだと思います。main,sub1,sub2関数の実体はありますか?
あと、開発環境を教えてください。
初心者です
Re: プログラムのインクルードについて
>>3D_3Dさん
返信ありがとうございます。
言われてみればそうですね、書き換えておきます(><)
すみませんが、関数の実体とは何のことでしょうか…
たとえばsub1.cは
というようになっています。すべて同じディレクトリ内にあります。
知識不足ですみません。
開発環境は、
OS:Windows7
コンパイラ:Borland C++ Compiler 5.5
です。
返信ありがとうございます。
言われてみればそうですね、書き換えておきます(><)
すみませんが、関数の実体とは何のことでしょうか…
たとえばsub1.cは
#include <stdio.h>
#include <stdlib.h>
#include "a.h"
#include "b.h"
#include "c.h"
boid sub1(int a[10][10],int b)
{
//省略
}
知識不足ですみません。
開発環境は、
OS:Windows7
コンパイラ:Borland C++ Compiler 5.5
です。
Re: プログラムのインクルードについて
bcc main.c sub1.c sub2.c a.c b.c c.c
というようにまとめて渡していますか?
一つずつ
bcc main.c
bcc sub1.c
というふうにやってたらダメですよ。そうするとmain.c、sub1.cそれぞれに全て関数の実体があると判断されて、投稿されたようなエラーが出ます。
(一つずつコンパイルして最後にリンクする手順がありますが、それはまた別の話)
というようにまとめて渡していますか?
一つずつ
bcc main.c
bcc sub1.c
というふうにやってたらダメですよ。そうするとmain.c、sub1.cそれぞれに全て関数の実体があると判断されて、投稿されたようなエラーが出ます。
(一つずつコンパイルして最後にリンクする手順がありますが、それはまた別の話)
written by へにっくす
Re: プログラムのインクルードについて
自分でも調べてみましたか?
自分で調べてもわからなければまた質問してください。
( http://www7b.biglobe.ne.jp/~robe/cpphtm ... 02033.html この辺見ておくといいかも。)
あと、boidではなくvoidです。打ち間違いに注意しましょう。
自分も、charのことをcahrと書いてしまうことがありますw
自分で調べてもわからなければまた質問してください。
( http://www7b.biglobe.ne.jp/~robe/cpphtm ... 02033.html この辺見ておくといいかも。)
あと、boidではなくvoidです。打ち間違いに注意しましょう。
自分も、charのことをcahrと書いてしまうことがありますw
初心者です
Re: プログラムのインクルードについて
>>へにっくすさん
返信ありがとうございます。
別々にコンパイルしていました(><)
へにっくすさんのおっしゃる通りにしてみたら、きちんとコンパイルすることができました。
ありがとうございます。
>>3D_3Dさん
返信ありがとうございます。
もっと勉強します(><)
無事、コンパイルすることができました。
付き合っていただいてありがとうございました。
打ち間違いも気を付けるようにします(><)
お二方ともありがとうございました。
無事改善することができたので、解決とさせていただきます。
精進します。
返信ありがとうございます。
別々にコンパイルしていました(><)
へにっくすさんのおっしゃる通りにしてみたら、きちんとコンパイルすることができました。
ありがとうございます。
>>3D_3Dさん
返信ありがとうございます。
もっと勉強します(><)
無事、コンパイルすることができました。
付き合っていただいてありがとうございました。
打ち間違いも気を付けるようにします(><)
お二方ともありがとうございました。
無事改善することができたので、解決とさせていただきます。
精進します。