我使用两个文件".h",其中有3个具有相同名称的全局变量。
我们假设有这些文件:
- A.h =>里面有"union var1", "union var2"one_answers"#define LENGTH 20"。
- B.h =>里面有"union var1", "union var2"one_answers"#define LENGTH 60"。
- C.h =>同时导入A.h和B.h。
当我编译C.h时,我有一个错误,导致相同的变量名称冲突。
我不想修改它们的名字,因为它们在公共图书馆中(我想使用它们的本来面目!)这是我的问题。有人能帮帮我吗?谢谢。
隔离每个公共库,这样您就不需要在任何单个文件中包含两个头文件。文件可以使用一个库,也可以使用另一个库,但不能同时使用两个库。您将需要为您需要的功能创建包装器,在使用其他库的代码中包装最容易包装的库并使用您的包装器,而不是直接使用库。
首先,头文件(".h")永远不会被"编译",严格来说,所以没有When I compile C.h
这样的东西。只有.cpp
文件,当然包括这些头文件被编译。
第二,如果你的程序需要包含两个引用同名不同变量的头文件,那么你可能有一些糟糕的设计问题。
第三,我认为(?,不要经常使用联合…),你需要为联合定义一个名称。否则,一个解决方案是定义不同的名称空间来区分两者:
// A.h
namespace aa {
union myType { int m1; float m2; }
myType var1;
}
.
// B.h
namespace bb {
union myType { int m1; float m2; }
myType var1;
}
.
// C.cpp
#include "A.h"
#include "B.h"
...
aa::var1.m1 = 1;
bb::var1.m1 = 2;
试试这个:
LIB_FILE.H
extern union_type var1; // declaration
extern union_type var2; // declaration
LIB_FILE.cpp
union_type var1; // definition
union_type var2; // definition
文件A.H #include "LIB_FILE.H"
文件B.H #include "LIB_FILE.H"
文件刘昀#include "A.H"
#include "B.H"
你需要区分全局变量的声明和定义