2017-11-19 16 views
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です。

私の問題を調査してくれてありがとう!

答えて

0

リンカーはどこにも定義されていないため、fooが見つかりません。 extern int foo 'を宣言することで、定義が別の場所にあることをリンカーに伝えます。 externを削除するか、リンカーが見つけることができるどこかでfooを定義してください。

これをご覧くださいexample on Wikipedia

+0

ご意見ありがとうございました。私はあなたのリンク(具体的にはファイル1)に与えられた例が私のコードと本質的に同じだと考えました。私の 'main'では' foo = 7; 'と書いていますが、それは定義ではないはずですか? –

+0

私はあなたの解決策を理解し始めています。私の元々の印象は、 'extern int foo'という行が' foo'変数の宣言として十分であったということでした。しかし、実際に変数を作成していないように見えます。コードを動作させるために、 'main'の外側に' int foo'を宣言しなければなりません。 'main'の外に' foo'を宣言するとファイルスコープが与えられるので、最初は一つのファイルでこれを行うのは意味がありません。 'extern'がヘッダーステートメントとして使われているので、' extern'ed変数をインクルードしている他のファイルで宣言なしで使用することができます。 –

関連する問題