2012-06-30 8 views
9

ヘッダーを使用していくつかのファイルをコンパイルする際に問題があります。ここに私のコードの内訳です:"関数への未定義の参照"エラー

FILE1.C

#include "header.h" 
int main() { 
    func1(); 
    return 0; 
} 

file2.c

#include "header.h" 
void func1() { 
    ... function implementation ... 
} 

がheader.h

void func1(); 


私は取得していますエラーは次のとおりです。機能'main'


'func1'

に注意することは未定義の参照:私はちょうど私の3つのファイルが設定されているかの簡単な内訳を使用しています。私はこれを3つのファイルで動作させる必要があります。私は正しく/すべてを含めて設定していますか?私はこの設定を使用する必要がありますが、実際にはfunc1()の実装への参照をfile.cがどのように取得するのかは分かりません。

+2

どのコンパイラを使用していますか?あなたはあなたのコンパイラの声明を提供できますか? – mathematician1975

+3

'gcc -o program file2.c file1.c'を使っているなら、これを' gcc -o program file1.c file2.c'に変更してください。順序は重要です。 –

+0

通常のgccコンパイルではこれがうまくいくはずです。問題は、これ以上の問題は非常に大きなプロジェクトのもので、何百ものファイルがあることです。しかし、問題の構造は同じです。私はちょうど私が物事を適切に含んでいなかったかもしれないと思ったが、そうではないと思う。 – Tesla

答えて

4

エラーがfunc1()への未定義の参照があると、他のエラーがない場合、私はあなたがあなたのプロジェクトにheader.hと呼ばれる2つのファイルを持っているし、他のコピーが代わりにして、あなたのコピーを含まれているからだと思うだろうfunc1()の宣言。

プロジェクトのインクルードパスを確認し、func1()の宣言を含むheader.hが最初に含まれていることを確認します。

+0

これは古いですが、私は問題に取り組んでおり、助けていただければ幸いです。基本的な設定はこの質問と同じですが、いくつかの関数は未定義の参照やいくつかの関数を与えないので、正しいヘッダーが含まれていることが確かです。それはちょっと変だけど、ヘッダーを危険にさらすと、コードは「正しく」コンパイルされません。 –

関連する問題