2016-11-21 11 views
0

私はいくつかの自動生成されたファイルを持っており、それぞれが一意の名前を持つ複雑な構造体を定義しています。それらはいくつかの基本型と構造体で構成されています。同じ名前の複雑な構造体を定義するいくつかのヘッダファイルを含めることは可能ですか?

これは、2つのファイルの小さな構成です。 1つのcar.hと1つのbike.hの各ファイルは、Coordinatesという同じ構造体を定義しています。しかし、私がコンパイルしようとすると、私は再定義エラーを受け取ります。

両方のヘッダーファイルを含めることは可能ですか?または、それらを1つのヘッダーにマージする必要がありますか?

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) 
[...] 

事前にお寄せいただきありがとうございます。

+0

このC++にタグを付けました。 'typedef struct {...} Foo'は' struct Foo {...}; '(これはCでも' typedef struct Foo {...} Foo; 'と書くことができます。そうすれば、#includeなしで 'struct Foo'を参照することができます) –

+0

ジェネレータがどのように供給されるかは、それほど問題になるかもしれません。私はあなたが何らかの種類のデータ構造体を使用し、 'Car'と' Bike'に 'Coordinates'をローカルに定義していると思いますが、この構造は両方で共有されるべきです。 –

+0

ジェネレータには1つのヘッダが供給されます。私は 'Car'と' Bike'を選んで、依存関係を持つヘッダにそれらを抽出します。 – CanO

答えて

0

これは、再定義エラーを引き起こす可能性があります。 Coordinates構造体を独自のヘッダーファイル(複数のインクルードの保護機能付き)に入れ、Car.hとBike.hからインクルードすることをお勧めします。

+1

ファイルは自動生成されます。 OPが自分のヘッダーに構造体を置くことができるのかどうかは明らかではありません。 –

+0

それを自分のヘッダーに入れることも可能です。しかし、2つの構造体CarとBikeは説明のためのものです。生産的なヘッダーと構造体はより複雑で、私はこの解決策では役に立たないでしょう。 – CanO

関連する問題