0
私はC++でコードを学習しており、OS X 10.13.1上でXcode9.1で作業しています。リンカエラーでXcode C++ extern variable linkerエラー
extern int foo;
#include <iostream>
int main() {
foo = 7;
std::cout << foo << std::endl;
return 0;
}
結果を実行します:
Undefined symbols for architecture x86_64:
"_foo", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
私はリンカが見つけることができない理由はわからないキーワードはexternを使用することを理解しようとしますが、私は次のコードで問題が発生しましたmain
の最初の行に定義されていますが、foo
です。
私の問題を調査してくれてありがとう!
ご意見ありがとうございました。私はあなたのリンク(具体的にはファイル1)に与えられた例が私のコードと本質的に同じだと考えました。私の 'main'では' foo = 7; 'と書いていますが、それは定義ではないはずですか? –
私はあなたの解決策を理解し始めています。私の元々の印象は、 'extern int foo'という行が' foo'変数の宣言として十分であったということでした。しかし、実際に変数を作成していないように見えます。コードを動作させるために、 'main'の外側に' int foo'を宣言しなければなりません。 'main'の外に' foo'を宣言するとファイルスコープが与えられるので、最初は一つのファイルでこれを行うのは意味がありません。 'extern'がヘッダーステートメントとして使われているので、' extern'ed変数をインクルードしている他のファイルで宣言なしで使用することができます。 –