сделал два файла отладчика. Один содержит ссылки на объекты и с ним идет работа из main.cpp, также он вызывает функции из второго отладочного файла. А второй так и оставил как есть. Всё работает)
Не могу я сути уловить... Дебагер, как я понял, временный класс, для отладки, для чего его включать в сшоп и продукт если его потом придется оттуда выпиливать
ну у меня там идет флаг для отладки. И весь отладочный код пишется внутри блок #ifdef - #endif Код (C++): #ifdef SERIAL_DEBUG_ENABLE так что при выключенном флаге отладочный код в компиляцию не попадет. Но всё-равно ручками правлю, когда участок отдебажил. А как по-другому отладкой заниматься? Я разобрался со встроенным отладчиком, но у меня код уже большой получается и при отключенной оптимизации в настройках platformio.ini Код (C++): debug_build_flags = -O0 -g -ggdb ; чтобы не оптимизировал компиляцию. Иначе отладка глючит код не помещается на микроконтроллер Слышал про отладочные платы, но у меня ее нет и ни разу не пользовался такой штукой
до этого просто в Serial выводил нужную информацию прям в том месте кода, где нужно было узнать данные. Потом, когда код сталь больше и таких мест стало много, вывел всё в отдельную функцию для вывода через Serial нужных данных. Потом перенес это в отдельный класс. Потом понадобилось принимать значения из Serial и менять настройки. Так потихоньку и разрослось всё))
В плане программирования ни чем не отличаются от обычных. Хоть самопальных, хоть каких. Отладочные - это значит весь GPIO вытащен наружу и доступен для подключения. В этом плане ардуины не являются отладками. Собственно, они так о себе и не заявляют))
Это не так делается. Например, у Вас есть нестатические свойства и методы, т.е. Вам нужен экземпляр. Но при этом у Вас конструктор private и никаких друзей нет, как Вы собрались экземпляр создавать? Но, об этом потом. Сейчас о Вашей проблеме с компиляцией. Ваша нынешняя проблема в том, что Вы не можете решить проблему "курицы и яйца". Вы используете Debuger в Procuct, а Product в Debuger. В результате, какой бы класс Вы не объявили первым, в нём будет использоваться ещё не объявленный второй класс. В этом случае, необходимо выбрать тот в класс (A) в котором другой (B) используется только как указатель и объявлять его первым. А для класса (B) сделать предварительное объявление выше определения класса A просто записав Код (C++): class B; class A { B * m_ptr; ... }; class B { A m_AMember; ... }; Нет там никакой концепции. Запомните твёрдо и не верьте никому, кто скажет, что это не так: Когда Вы пишете #include <filename> (или с кавычками - пофиг) - это ровным счётом тоже самое, как если бы Вы просто "вкопипастили" в это место указанный файл. И всё. Никаких других концепций там нет.
Лично я ещё дилетант в программировании, но мне кажется нужно отладочные методы в сами классы включать. Потом оптимизатор их всё равно выкинет из общего кода, а мороки меньше. Вообще смысл одного общего класса для отладки не понимаю. Это только усложняет всё.
Не только усложняет, а просто разрушает саму идею ООП о том, что всё связанное с классом, должно быть инкапсулировано в нём самом, и превращает программу в неуправляемое, труднопредсказуемое болото перемешанного кода.