0

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 は使用できません)
4

2 に答える 2

2

私の見解では、externこのグローバル変数は複数の C ファイル間で共有されるため、修飾子を使用してグローバル変数をヘッダー ファイルで宣言する必要があります。

extern gAddress gAddressMap;  // define variable   
于 2017-01-12T15:28:43.783 に答える