У меня есть большой проект, который предназначен для контроля и тестирования оборудования.
Существует 4 класса управления устройствами (для интерферометров, пьезодвигателя, системы PXI и контроллера нанопозиционирования).
Я создал «главный» класс под названием MainIO, в котором хранится экземпляр каждого из вышеперечисленных классов, чтобы выполнять операции во всем диапазоне ввода-вывода (например, перемещать двигатель и проверять интерферометры). Заголовочный файл MainIO включает в себя 4 заголовка управляющих классов.
Затем у меня есть отдельный «глобальный» файл hpp/cpp, который содержит глобальные переменные, преобразования, операции с файлами ini и так далее. Это выложено с пространствами имен для типов операций, а не для создания класса, то есть GCONV::someFunction();
и GMAIN::controllerModel;
Мне нужно, чтобы все 4 класса управления имели доступ к преобразованию и другим глобальным операциям. У меня были они все, включая global.hpp в какой-то момент, но я что-то изменил (не могу придумать, что это может быть!), и теперь кажется, что я не могу включить global.hpp ни в ЛЮБОЙ из моих классов управления hpp или cpp. без получения ошибки компоновщика -
global.obj:-1: error: LNK2005: "class QString GMAIN::controllerModel" (?controllerModel@GMAIN@@3VQString@@A) already defined in controllers.obj
Я абсолютно уверен, что сделал что-то глупое, и решение смотрит мне прямо в лицо, но дело дошло до того, что я настолько разочаровался в этом, что не вижу леса за деревьями.