2014-01-26 243 views
0

我正在开发一个用于C++的mbed微控制器的GUI,我有一些问题。无效指针指向对象指针

这种情况是: 不同的窗口小部件类(按钮,滑块...)与小部件虚拟父功能。然后是一个虚拟函数布局,也有类似(gridLayout,...)的类。该布局具有像layout.add(* widget)这样的功能,以将小部件指针添加到矢量。 然后我有一个处理触摸事件的控制器函数,并使用当前活动布局来检查触摸的x,y坐标处布局中的正确小部件是什么。

现在我想在widget类中添加一个指向布局的指针,这样控制器类可以在需要时更改activeLayout。还有一个函数指针,这样控件可以在使用小部件时运行某个函数。

现在的问题:我愿做这样的事情:

Button::Button(char* text_, int color_, void *function_, Layout *layout_): text(text_), color(color_), function(function_), layout(layout_){} 

但后来我需要包括布局类和布局类已经包含了Widget类 - >错误!什么是最简单的方法来做到这一点?我已经尝试过无效*指针,然后静态转换为布局,但没有奏效。

我还需要在每个小部件和布局中包含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 *'的用法根本不同**。 – 2014-01-26 18:10:57

+0

对不起,它是C++(补充说它是C++中的主题 – Jannes

+2

我不确定我是否正确理解你的问题,但我认为你正在寻找_forward类的声明_(class 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,亮度种族在轨道和Jan邬达克)