我如何在OOP程序中共享结构?

时间:2012-08-13 14:48:20

标签: c++ oop struct multifile

我正在编写一个代码,它是OOP,我需要在文件之间共享一个结构,我将我的结构放在我的.h文件末尾并包含它。 sush as:

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

问题: 我可以分享一下吗?

2 个答案:

答案 0 :(得分:3)

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

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

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


// cpp2
struct icsData;
extern icsData icsDataPtr;

答案 1 :(得分:1)

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

标题文件:

struct icsData
{
    AudioBuilder *audioBPtr;
};

extern icsData icsDataPtr;

一些cpp文件:

icsData icsDataPtr;

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