我们试图在 Tandem X 系列机器上编译一个程序,但我们得到了形式的错误,“在 C 和/或 C++ 中初始化数据项的非法重复定义”。相同的代码在 aTandem S 系列机器上为我们成功编译。
我们有以下文件结构:
/---地址映射.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:-> 使用地址映射的第一个文件 */
#include "AddressMap.h" // include file
/*file2.cpp:-> 第二个文件也使用地址映射 */
#include "AddressMap.h" // include file
问题
两个文件都已成功编译,但将它们链接在一起失败...
file1.o和file2.o中初始化数据项gAddressMap的非法重复定义
由于两个文件都需要访问这个变量,所以都包含了头文件;也许这是造成错误的原因。此外,它是现有代码,因此我们希望避免重大代码更改。特别是,我们希望保持相同的头文件和变量名。
我们如何解决这个错误?
串联细节:
- X系列
- 使用的链接器是 xld(nld 在本系列中不可用)