Вызов члена указателя структуры из класса - (указатель) "...неинициализированный", (указатель) "...был объявлен здесь" ⇐ C++
Вызов члена указателя структуры из класса - (указатель) "...неинициализированный", (указатель) "...был объявлен здесь"
Я пытаюсь разработать класс-оболочку, которая объединяет несколько периферийных устройств на плате контроллера, включая датчики, светодиоды RGB и многие другие.
Чтобы добиться этого, я пытаюсь сгруппировать все подключенные периферийные устройства в структуру внутри класса Controller и получить доступ к его членам через указатель структуры.
Моя конечная цель — объявить контроллер и использовать периферийные устройства следующим образом:
Контроллер sys; sys.devices -> rgb.setColor(/*код цвета*/); поскольку я считаю его более читабельным/понятным во время разработки.
Я сократил свой код до минимума после нескольких исправлений на основе других сообщений SOVF.
Обратите внимание, что я тестирую свой код в Codelite с использованием mingw64, однако это будет реализовано с использованием Platformio на плате Teensy. Это всего лишь упрощенная версия для форума
Физические контакты объявляются как структура в файле pinout.h:
#ifndef PINOUT_H #define PINOUT_H структура Распиновка { интервал Р = 1; интервал G = 2; интервал Б = 3; }; #endif // PINOUT_H затем есть класс RGBLed и основной файл (я объединил их здесь просто для простоты)
#include "pinout.h" #include класс RGBLed { публика: RGBLed(int pinR, int pinG, int pinB) { это->_r = pinR; это->_g = pinG; это->_b = pinB; }; // это просто тупой пример метода логическое включение() { это->_ledState = правда; вернуть _ledState; } int* getPinout() { статический int pinPtr[3]; pinPtr[0] = это->_r; pinPtr[1] = это->_g; pinPtr[2] = это->_b; вернуть пинПтр; } частный: интервал _r, _g, _b; боул _ledState; }; /* Это класс _wrapper_, который я разрабатываю */ Контроллер класса { публика: // Конструктор по умолчанию встроенный контроллер(){}; структура Периферийные устройства { RGBLed rgb = RGBLed(_pins->R, _pins->G, _pins->B); // в предыдущей компиляции я использовал: // RGBLed rgb = RGBLed(Controller::_pins->R, Controller::_pins->G, Controller::_pins->B); // однако я столкнулся с проблемами компоновщика /* В будущем здесь будет объявлено еще много устройств */ }; struct Периферийные устройства *devices; частный: // Я хочу, чтобы контакты были недоступны для разработчика (то есть меня и коллег) статическая распиновка* _pins; // Изначально у меня было предупреждение о «недопустимом использовании нестатического элемента данных» // после объявления его статическим оно исчезло }; Тогда мой main():
int main() { // Экземпляр объекта контроллера Система контроллера; // Проверяем, можем ли мы вызывать методы из члена структуры внутри класса если (sys.devices->rgb.turnOn()) std::cout
Я пытаюсь разработать класс-оболочку, которая объединяет несколько периферийных устройств на плате контроллера, включая датчики, светодиоды RGB и многие другие.
Чтобы добиться этого, я пытаюсь сгруппировать все подключенные периферийные устройства в структуру внутри класса Controller и получить доступ к его членам через указатель структуры.
Моя конечная цель — объявить контроллер и использовать периферийные устройства следующим образом:
Контроллер sys; sys.devices -> rgb.setColor(/*код цвета*/); поскольку я считаю его более читабельным/понятным во время разработки.
Я сократил свой код до минимума после нескольких исправлений на основе других сообщений SOVF.
Обратите внимание, что я тестирую свой код в Codelite с использованием mingw64, однако это будет реализовано с использованием Platformio на плате Teensy. Это всего лишь упрощенная версия для форума
Физические контакты объявляются как структура в файле pinout.h:
#ifndef PINOUT_H #define PINOUT_H структура Распиновка { интервал Р = 1; интервал G = 2; интервал Б = 3; }; #endif // PINOUT_H затем есть класс RGBLed и основной файл (я объединил их здесь просто для простоты)
#include "pinout.h" #include класс RGBLed { публика: RGBLed(int pinR, int pinG, int pinB) { это->_r = pinR; это->_g = pinG; это->_b = pinB; }; // это просто тупой пример метода логическое включение() { это->_ledState = правда; вернуть _ledState; } int* getPinout() { статический int pinPtr[3]; pinPtr[0] = это->_r; pinPtr[1] = это->_g; pinPtr[2] = это->_b; вернуть пинПтр; } частный: интервал _r, _g, _b; боул _ledState; }; /* Это класс _wrapper_, который я разрабатываю */ Контроллер класса { публика: // Конструктор по умолчанию встроенный контроллер(){}; структура Периферийные устройства { RGBLed rgb = RGBLed(_pins->R, _pins->G, _pins->B); // в предыдущей компиляции я использовал: // RGBLed rgb = RGBLed(Controller::_pins->R, Controller::_pins->G, Controller::_pins->B); // однако я столкнулся с проблемами компоновщика /* В будущем здесь будет объявлено еще много устройств */ }; struct Периферийные устройства *devices; частный: // Я хочу, чтобы контакты были недоступны для разработчика (то есть меня и коллег) статическая распиновка* _pins; // Изначально у меня было предупреждение о «недопустимом использовании нестатического элемента данных» // после объявления его статическим оно исчезло }; Тогда мой main():
int main() { // Экземпляр объекта контроллера Система контроллера; // Проверяем, можем ли мы вызывать методы из члена структуры внутри класса если (sys.devices->rgb.turnOn()) std::cout
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение