我正在编写一个代码,它是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;
请注意,这并不是真正的面向对象。您可能希望创建一个静态类,提供指针的一个实例,或者只是使该类成为单一实例,具体取决于要共享的常见对象数。如果可能,应避免使用全局对象或变量。