Я разрабатываю графический интерфейс для mbed-микроконтроллера на C++, и у меня есть несколько проблем.Void указатель на указатель объекта
Деловая информация: Различные классы виджетов (кнопка, слайдер ...) с виртуальной родительской функцией виджета. Затем виртуальный макет функции с такими же классами, как (gridLayout, ...). Макет имеет такие функции, как layout.add (* widget), чтобы добавить указатели виджетов к вектору. Затем у меня есть функция контроллера, которая обрабатывает события касания и использует текущий активный макет, чтобы проверить, какой правильный виджет находится в макете в координатах x, y на ощупь.
Теперь я хочу добавить указатель, указывающий на макет в классе виджетов, чтобы класс контроллера мог изменить значение activeLayout, если это необходимо. Существует также указатель на функцию, поэтому контроллер может запускать определенную функцию при использовании виджета.
Теперь проблема: Я хотел бы сделать что-то вроде этого:
Button::Button(char* text_, int color_, void *function_, Layout *layout_): text(text_), color(color_), function(function_), layout(layout_){}
Но тогда мне нужно включить класс макета, а класс макет уже включает в себя класс виджета -> Ошибка! Каков самый простой способ сделать это? Я уже пробовал void * указатели, а затем статическую броску в Layout, но это не сработало.
Мне также нужно включить класс TFT в каждый виджет и макет, что было бы самым простым способом сделать это? Теперь у меня просто Display.h с в нем:
#ifndef DISPLAY_H
#define DISPLAY_H
static SPI_TFT Screen(LCD_SDI, LCD_SDO, LCD_SCK, LCD_CS,"Screen");
#endif
Но я не думаю, что это правильный способ сделать что-то вроде этого.
Большое вам спасибо за помощь!
Так C ** XOR ** C++? Использование «void *» радикально отличается ** на двух языках. –
Извините, это C++ (добавлено, что это C++ в теме. – Jannes
Я не уверен, правильно ли я правильно понял ваш вопрос, но я думаю, что вы ищете _forward declaration_ класса ('Layout класса') –