Как я могу поделиться структурой в программе ООП?
Я пишу код, что это ООП, и мне нужно разделить структуру между файлами, я помещаю свою структуру в конец моего.h файла и включаю ее. Sush как:
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 ответа
Вы должны использовать extern
ключевое слово, затем определите его в одной единице перевода:
Заголовочный файл:
struct icsData
{
AudioBuilder *audioBPtr;
};
extern icsData icsDataPtr;
Какой-то cpp файл:
icsData icsDataPtr;
Просто отметьте, что это не совсем объектно-ориентированный. Возможно, вы захотите создать статический класс, предоставляющий один экземпляр указателя, или просто сделать класс одиночным, в зависимости от того, сколько общих объектов вы хотите использовать совместно. Глобальных объектов или переменных следует избегать, если это возможно.
Вы должны определить это в одном месте. Определив его в заголовочном файле, вы получите столько же определений, сколько исходных файлов содержат этот заголовочный файл.
Определите это в одном cpp
файл и использовать extern
для остальных. Например
// cpp1
struct icsData
{
AudioBuilder *audioBPtr;
}icsDataPtr;
// cpp2
struct icsData;
extern icsData icsDataPtr;