0

私はそれが OOP であり、ファイル間で構造体を共有する必要があるというコードを書いています。構造体を .h ファイルの最後に配置してインクルードします。そのような:

struct icsData
{
    AudioBuilder *audioBPtr;
}icsDataPtr;

その後、次のエラーが発生しました。

NetworkSocket.o:(.bss+0x0): multiple definition of `icsDataPtr'
main.o:(.bss+0x0): first defined here
AudioCore.o:(.bss+0x10): multiple definition of `icsDataPtr'
main.o:(.bss+0x0): first defined here
AudioBuilder.o:(.bss+0x0): multiple definition of `icsDataPtr'
main.o:(.bss+0x0): first defined here
AudioInterface.o:(.bss+0x0): multiple definition of `icsDataPtr'
main.o:(.bss+0x0): first defined here
ChannelEndpoint.o:(.bss+0x0): multiple definition of `icsDataPtr'
main.o:(.bss+0x0): first defined here
Device.o:(.bss+0x0): multiple definition of `icsDataPtr'
main.o:(.bss+0x0): first defined here
MainCore.o:(.bss+0x0): multiple definition of `icsDataPtr'
main.o:(.bss+0x0): first defined here
MicroHandShake.o:(.bss+0x0): multiple definition of `icsDataPtr'
main.o:(.bss+0x0): first defined here
FrameBuilder.o:(.bss+0x0): multiple definition of `icsDataPtr'
main.o:(.bss+0x0): first defined here
RealTimeStatus.o:(.bss+0x0): multiple definition of `icsDataPtr'
main.o:(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status
make: *** [eCom] Error 1

質問: 共有できますか?

4

2 に答える 2

3

1 か所で定義する必要があります。ヘッダーファイルで定義すると、ソースファイルにそのヘッダーファイルが含まれているため、複数の定義ができます。

1 つのファイルで定義し、他のcppファイルで使用externします。例えば

// cpp1
struct icsData
{
    AudioBuilder *audioBPtr;
}icsDataPtr;


// cpp2
struct icsData;
extern icsData icsDataPtr;
于 2012-08-13T14:51:43.733 に答える
1

キーワードを使用してからextern、1 つの翻訳単位で定義する必要があります。

ヘッダー ファイル:

struct icsData
{
    AudioBuilder *audioBPtr;
};

extern icsData icsDataPtr;

いくつかの cpp ファイル:

icsData icsDataPtr;

これは実際にはオブジェクト指向ではないことに注意してください。共有したい共通オブジェクトの数に応じて、ポインターのインスタンスを 1 つ提供する静的クラスを作成するか、単にクラスをシングルトンにすることができます。可能であれば、グローバル オブジェクトまたは変数は避ける必要があります。

于 2012-08-13T14:52:34.030 に答える