申し訳ありません、これは繰り返し質問ですが、私は数時間にわたって検索していますが、矛盾する回答が...作業しています。Eclipse/GCC:Extern変数への未定義参照
これは簡単なことです。私は多くのソースファイルを持っており、私は単一のファイルに存在するいくつかの一般的なパラメータ、例えば "Parameters.h"を持っています。私はこれらのパラメータを(実行時に)プログラムに引数として渡すことによって設定したい。
PS:関数の引数としてすべてを渡すのが良い方法だとわかっていますが、それはちょっとしたコードですが、あまりにも多くの変更を加えることなくすぐに結果を得る必要があります。ここ
が最小実施例である:
Parameters.h
#ifndef PARAMETERS_H_
#define PARAMETERS_H_
extern int Alpha;
#endif
main.cppに
#include <iostream>
#include "Parameters.h"
int main(int argc, char * argv[])
{
const int Alpha = 12.0;
}
Functions.cpp
私はgcc main.cpp Functions.cpp
でコンパイルする場合
#include "Parameters.h"
double Foo(const double& x)
{
return Alpha*x;
}
は私がエラー ":`アルファ」への未定義参照Functions.cpp :(テキスト+は0xa)" を取得します。
ありがとうございました!あなたが言うように、main.cppのファイルスコープにAlphaを定義していないという問題がありました。今私は馬鹿のように感じます:-)もう一度おねがいします。 – MGA
宣言がヘッダファイルにあると考えて、Alphaを 'extern'として定義する必要はありますか? – ldgorman
@ldgorman: 'extern'を使用しない場合は、単に宣言ではなく定義になります。このヘッダーを複数のソースファイルに含めると、同じシンボルの複数の定義に関するリンカーエラーが発生します。 –