如何在 OOP 程序中共享结构



我正在编写一个代码,它是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

问题:我可以分享吗?

您需要在一个地方定义它。在头文件中定义它,你将拥有尽可能多的多个定义,因为源文件包含该头文件。

在一个cpp文件中定义它,并对其他文件使用 extern。例如

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

// cpp2
struct icsData;
extern icsData icsDataPtr;

您必须使用 extern 关键字,然后在一个翻译单元中定义它:

头文件:

struct icsData
{
    AudioBuilder *audioBPtr;
};
extern icsData icsDataPtr;

一些 cpp 文件:

icsData icsDataPtr;

请注意,这并不是真正的面向对象。您可能希望创建一个静态类,提供指针的一个实例,或者只是使该类成为单一实例,具体取决于要共享的常见对象数。如果可能,应避免使用全局对象或变量。

最新更新