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