2012-08-13 60 views
0

我正在写一个代码,它是OOP,我需要在文件之间共享一个结构,我把我的结构放在我的.h文件结尾并包含它。 sush为:如何在OOP程序中共享结构?

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 

问: 我可以分享吗?

回答

1

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

头文件

struct icsData 
{ 
    AudioBuilder *audioBPtr; 
}; 

extern icsData icsDataPtr; 

有些CPP文件:

icsData icsDataPtr; 

请注意,这不是真的面向对象。你可能想要创建一个静态类来提供指针的一个实例,或者简单地将该类作为一个单例,这取决于你想共享多少个通用对象。如果可能,应避免使用全局对象或变量。

+0

你用单音班解决了我的问题。但现在,我无法传递正确的数据。 – PersianGulf 2012-08-13 16:57:16

+0

您应该更详细地说明 - 或者更好:使用示例代码或您所做的任何事情创建新问题。 – Mario 2012-08-13 19:06:40

+0

它并没有解决我的问题,'因为我改变了结构'我有多个源文件和一个头文件,并且需要定义一个实例并在所有文件中使用 – PersianGulf 2012-08-14 06:28:09

3

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

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

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


// cpp2 
struct icsData; 
extern icsData icsDataPtr; 
+0

它不能解决我的问题,我有多个源文件和一个头文件,并且需要定义'one'实例并在所有文件中使用它。 – PersianGulf 2012-08-14 06:27:36

+0

@seg_fault - 在你的cpp文件的答案中写入'cpp2'给出的代码不起作用?你有尝试过吗? – 2012-08-14 09:14:42

+0

哦不,我在头文件中定义了你的'struct'。 – PersianGulf 2012-08-14 15:15:47