Как я могу поделиться структурой в программе ООП?

Я пишу код, что это ООП, и мне нужно разделить структуру между файлами, я помещаю свою структуру в конец моего.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;
Другие вопросы по тегам