Ошибка CMake 178

Уважаемые знатоки!

Решаю такую задачу:

Задание. Проект симулятора работы компьютера Что нужно сделать Реализуйте простую модель работы персонального компьютера в качестве многомодульного проекта. В компьютере несколько основных, условных компонент.

Центральный процессор (cpu) — должен иметь функцию compute, которая складывает 8 чисел из буфера оперативной памяти (см. далее) и выводит результат в консоль.

Оперативная память (ram) — содержит буфер на 8 целых чисел, которые можно заполнить функцией write и считать функцией read.

Жёсткий диск (disk) — имеет в себе две функции, save и load. Функция save должна сохранить состояние 8 чисел из оперативной памяти на постоянный носитель в файл data.txt. Функция load — загрузить их с носителя в оперативную память.

Графическая карта (gpu) — выводит в консоль 8 чисел из оперативной памяти.

Клавиатура (kbd) — позволяет ввести 8 чисел и разместить их в оперативной памяти.

Каждая компонента должна располагаться в отдельном модуле, с отдельным заголовочным файлом. Основной модуль программы (main.cpp) должен считывать пользовательский ввод команды, которая соответствует отдельным функциям устройств: sum (вычисление суммы), save (сохранить в файл), load (загрузить из файла), input (ввести с клавиатуры), display (вывести на экран). Команда exit — выходит из программы.

Строю следующий проект:

https://github.com/alexeysklemin/cmkeStuding/tree/main/comp/computers

Выдает следующие ошибки: введите сюда описание изображения

направте в правильную сторону. Где я свернул не туда


Ответы (1 шт):

Автор решения: Harry

У вас, как я и предполагал, в ram.h есть определение

int ram[8] ={0,0,0,0,0,0,0,0};

которое из-за включения ram.hв разные .cpp-файлы приводит к тому, что у вас в каждом файле свой int ram[8], так что нарушено ODR - правило одного определения, и при компоновке компоновщик не знает, что делать с несколькими одинаковыми сущностями с одинаковым именем, для которых в каждом файле выделена своя память...

Напишите в ram.h

extern int ram[8];

а вот это

int ram[8] ={0,0,0,0,0,0,0,0};

перенесите в какой-то один .cpp-файл.

CMake в полной мере ни при чем.

→ Ссылка