我使用了两个文件" .h"其中有3个具有相同名称的全局变量。
我们假设有这些文件:
当我编译C.h时,我的错误原因是相同变量名称的冲突。
我不想修改他们的名字,因为他们在公共图书馆内(我想按原样使用它们!)。 这是我的问题。 有人能帮我吗?感谢。
答案 0 :(得分:6)
隔离每个公共库,这样您就不需要在任何单个文件中包含两个头文件。文件可以使用一个库,也可以使用另一个库,但不能同时使用两个库。您将需要为您需要的功能创建包装器,包装最容易包装的库,并使用您的包装器而不是直接使用其他库的代码中的库。
答案 1 :(得分:1)
首先,严格来说,头文件(“。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;
答案 2 :(得分:0)
试试这个:
LIB_FILE.H
extern union_type var1; // declaration
extern union_type var2; // declaration
LIB_FILE.cpp
union_type var1; // definition
union_type var2; // definition
FILE A.H
#include "LIB_FILE.H"
FILE B.H
#include "LIB_FILE.H"
FILE C.H
#include "A.H"
#include "B.H"
您需要将声明与全局变量的定义区分开来。