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



我使用两个文件".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"

你需要区分全局变量的声明和定义

最新更新