1

我正在使用两个文件“.h”,其中有 3 个同名的全局变量。

我们假设有这些文件:

  • Ah => 里面有“union var1”、“union var2”和“#define LENGTH 20”。
  • Bh => 里面有“union var1”、“union var2”和“#define LENGTH 60”。
  • Ch => 同时导入 Ah 和 Bh

当我编译 Ch 时,我有一个相同变量名称冲突的错误原因。

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

4

3 回答 3

6

隔离每个公共库,这样您就不需要在任何单个文件中包含两个头文件。文件可能使用一个库,也可能使用另一个库,但不能同时使用两者。您将需要为您需要的功能创建包装器,包装最容易包装的库,并在使用其他库的代码中使用您的包装器,而不是直接使用库。

于 2014-06-19T10:33:27.647 回答
1

首先,严格来说,头文件(“.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;
于 2014-06-19T11:07:06.187 回答
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

档案啊

#include "LIB_FILE.H"

文件 BH

#include "LIB_FILE.H"

文件通道

#include "A.H"
#include "B.H"

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

于 2014-06-19T11:48:52.640 回答