Tandem X シリーズ マシンでプログラムをコンパイルしようとしていますが、「C および/または C++ で初期化されたデータ項目の定義が不正に重複しています」という形式のエラーが発生します。同じコードが、Tandem S シリーズ マシンで正常にコンパイルされます。
次のファイル構造があります。
/---AddressMap.h----/
#ifndef ADDRESSMAP // Header file macro
#define ADDRESSMAP // Header file macro
typedef map<long,char*,less<long> > gAddress; data type
gAddress::iterator gAddressIterator; // define iterator
gAddress gAddressMap; // define variable
#endif//ADDRESSMAP
/*file1.cpp:-> AddressMap を使用する最初のファイル */
#include "AddressMap.h" // include file
/*file2.cpp:-> 2 番目のファイルも AddressMap を使用 */
#include "AddressMap.h" // include file
問題
両方のファイルは正常にコンパイルされますが、それらをリンクすると失敗します...
file1.o と file2.o の初期化されたデータ項目gAddressMapの不正な重複定義
両方のファイルがこの変数にアクセスする必要があるため、両方にヘッダー ファイルが含まれています。たぶんそれがエラーの原因です。また、既存のコードなので大幅なコード変更は避けたいと考えています。特に、同じヘッダー ファイルと変数名を維持したいと考えています。
このエラーを解決するにはどうすればよいですか?
タンデムの詳細:
- Xシリーズ
- 使用するリンカーは xld (このシリーズでは nld は使用できません)