Вызов члена указателя структуры из класса - (указатель) "...неинициализированный", (указатель) "...был объявлен здесь"C++

Программы на 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»