【问题标题】:Is it possible to include several header files that define complex structs with same names?是否可以包含多个定义具有相同名称的复杂结构的头文件?
【发布时间】:2016-11-21 08:42:52
【问题描述】:

所以我有几个自动生成的文件,每个文件都定义了一个具有唯一名称的复杂结构。它们由一些原始类型和结构组成。

这是这两个文件的一个小方案。一个car.h 和一个bike.h,每个文件都定义了相同的结构,称为Coordinates。但是当我尝试编译时,我得到了重新定义错误。

是否可以同时包含该头文件?还是我必须将它们合并到一个标题中?

car.h
#ifndef CAR_H_
#define CAR_H_

#pragma pack(push,4)
typedef struct
{
    uint32 pos_x;
    uint32 pos_y
} Coordinates;
#pragma pack(pop)

#pragma pack(push,1)
typedef struct
{
    tUInt8 id;
    Coodinates position_of_car;
} Car;
#pragma pack(pop)
[...]

Bike.h 也定义了Coordinates

bike.h
#ifndef BIKE_H_
#define BIKE_H_

#pragma pack(push,4)
typedef struct
{
    uint32 pos_x;
    uint32 pos_y
} Coordinates;
#pragma pack(pop)

#pragma pack(push,1)
typedef struct
{
    uint8 id;
    Coodinates position_of_car;
} Bike;
#pragma pack(pop)
[...]

提前感谢您的建议!

【问题讨论】:

  • 不是您的问题,但您已标记此 C++。 typedef struct { ... } Foo 会比 struct Foo { ... }; 好得多(即使在 C 语言中,您也可以并且可能应该编写 typedef struct Foo { ... } Foo; - 这样您就可以在没有#include 的情况下引用 struct Foo。)
  • 这可能是如何为发电机供电的更多问题。我怀疑您使用某种数据结构方案并在本地为CarBike 定义了Coordinates,而这个结构应该由两者共享。
  • 生成器使用一个标头。我只是选择CarBike 将它们提取到一个带有它们的依赖项的自己的标题中。

标签: c++ struct include header-files redefinition


【解决方案1】:

这可能会导致重新定义错误。 我建议将 Coordinates 结构放在它自己的头文件中(防止多重包含)并从 Car.h 和 Bike.h 中包含它

【讨论】:

  • 文件是自动生成的。目前尚不清楚 OP 是否可以将结构放在自己的标题中。
  • 将它们放在自己的标题中是可能的。但是 Car 和 Bike 这两个结构只是为了说明。高效的标头和结构更复杂,我不会从这个解决方案中受益。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-31
  • 2016-03-29
  • 1970-01-01
  • 2017-09-09
  • 1970-01-01
  • 2020-10-15
  • 2016-12-04
相关资源
最近更新 更多