Ошибка 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 шт):
У вас, как я и предполагал, в 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 в полной мере ни при чем.
