私はあまり慣れておらず、c++ でのグローバル変数の使用をよく理解していません。ここで問題を解決することはできませんが、宣言を正しい方法で使用しているとほぼ確信しています。ファイルのパラメーターを含む順序付けられていないマップがあります。これは正常に機能しています。コンテンツを出力しました。すべて問題ありません。しかし、このマップをプログラムのどこでも使用できるようにして、毎回引数として渡す必要がないようにしたいので、グローバル変数を使用します。私は少し typedef を持っています:
typedef tr1::unordered_map<string,float> unmap;
次に、パラメータを読み取る関数:
unmap readParameters(string filename);
次に、グローバル スコープの宣言 (もちろん、メイン以外のすべて。ただし、同じファイル内にありますが、まだヘッダーはありません):
extern unmap params;
影響は main() 関数で行われます。
unmap params=readParameters(inputfile_name);
(注:「マップ解除」の有無にかかわらず試しましたが、同じエラーです)。そして、マップ「params」を使用する内容を表示する関数 displayInformation() があります。
for (unmap::iterator it=params.begin();it!=params.end();it++){
cout<<it->first<<" = "<<it->second<<endl;
}
しかし、g ++はうめき声を上げます:
Undefined symbols for architecture x86_64:
"_params", referenced from:
_main in loca.o
displayInformation() in loca.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [loca] Error 1
では、これをどの関数からも見ることができるようにするには、どのように宣言/使用すればよいでしょうか?