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

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

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

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


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

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

头文件:

struct icsData
{
    AudioBuilder *audioBPtr;
};

extern icsData icsDataPtr;

一些cpp文件:

icsData icsDataPtr;

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

于 2012-08-13T14:52:34.030 回答