Я пишу программу с виртуальным классом компонента, который подробно описывает поведение компонента, которому необходимо получить доступ к регистрам устройства через шину. Различные операции с регистрами описываются в виртуальном классе, который не зависит от типа используемой шины. Производный класс RegisterI2C реализует функции доступа к регистрам для шины I2C. Класс ComponentI2C соответствует использованию компонента, использующего шину I2C. В этом классе я пытаюсь определить функцию компонент_reg, которая вызывает конструктор класса RegisterI2C, но во время компиляции получаю следующую ошибку:
начальное значение ссылки на неконстантное значение должно быть lvalue C/C++(461).
Я пробовал разные типы приведения, но не нашел решения. Так что буду признателен, если у кого-нибудь возникнут идеи
Компонент класса; class Register { // определяет метод доступа к регистрам публика: Регистр(Компонент *родитель, int reg): родитель_(родитель), регистр_(рег) {} виртуальный int read() = 0; // читаем регистр Компонент *const родитель_; // родительский компонент интервал регистр_; // регистр, с которым нужно работать }; class Component { // определяет, что делает компонент. Использует функции регистра виртуальный регистр &comComponent_reg(int reg) = 0; // возвращаем регистр, который мы используем для операции на компьютере }; класс I2C {}; // предоставляет функции шины I2C класс КомпонентI2C; class RegisterI2C : public Register { // реализация функции регистрации для шины I2C публика: RegisterI2C(Component *parent, int reg): Register(parent, reg) {} /* использовать методы класса I2C путем приведения Component к ComponentI2C */ int read() переопределить {вернуться 0; } }; класс ComponentI2C: общедоступный компонент, общедоступный I2C { публика: RegisterI2C &comComponent_reg(int reg) override { return {this, reg}; }; // **ЗДЕСЬ ПРОБЛЕМА** }; Примечание: возврат компонент_reg в качестве указателя невозможен
Мобильная версия