2014-01-26 3 views
0

Я разрабатываю графический интерфейс для 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 

Но я не думаю, что это правильный способ сделать что-то вроде этого.

Большое вам спасибо за помощь!

+4

Так C ** XOR ** C++? Использование «void *» радикально отличается ** на двух языках. –

+0

Извините, это C++ (добавлено, что это C++ в теме. – Jannes

+2

Я не уверен, правильно ли я правильно понял ваш вопрос, но я думаю, что вы ищете _forward declaration_ класса ('Layout класса') –

ответ

0

Решение: использование декларации в каждом классе. class Layout;

Тогда для класса TFT я должен был использовать extern SPI_TFT Screen; и в моей main.cpp я сделал SPI_TFT Screen(LCD_SDI, LCD_SDO, LCD_SCK, LCD_CS,"Screen");

(большое спасибо t.niese, легковесность Раса в Orbit и Ян HUDEC)