全局变量之间的冲突c / c ++

时间:2014-06-19 10:30:09

标签: c++ global-variables conflicting-libraries

我使用了两个文件" .h"其中有3个具有相同名称的全局变量。

我们假设有这些文件:

  • A.h =>在它里面有" union var1"," union var2" " #define LENGTH 20"。
  • B.h =>在它里面有" union var1"," union var2"和#34; #define LENGTH 60"。
  • C.h =>导入A.h和B.h。

当我编译C.h时,我的错误原因是相同变量名称的冲突。

我不想修改他们的名字,因为他们在公共图书馆内(我想按原样使用它们!)。 这是我的问题。 有人能帮我吗?感谢。

3 个答案:

答案 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"

您需要将声明与全局变量的定义区分开来。