指向对象指针的空指针

Void pointer to object pointer

本文关键字:空指针 指针 对象      更新时间:2023-10-16

我正在为C++的mbed微控制器开发GUI,我遇到了一些问题。

情况是: 具有小部件虚拟父函数的不同小部件类(按钮、滑块等)。然后是一个虚拟函数布局,其中包含诸如(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* 指针,然后是布局的静态投射,但这不起作用。

我还需要在每个小部件和布局中包含 TFT 类,最简单的方法是什么?现在我只有一个 Display.h:

#ifndef DISPLAY_H
#define DISPLAY_H
static SPI_TFT Screen(LCD_SDI, LCD_SDO, LCD_SCK, LCD_CS,"Screen");
#endif

但我真的不认为这是做这样的事情的正确方法。

非常感谢您的帮助!

解决方案是:在每个类中使用前向声明。class Layout;

然后对于TFT课,我不得不使用extern SPI_TFT Screen;,在我的主要.cpp我做了SPI_TFT Screen(LCD_SDI, LCD_SDO, LCD_SCK, LCD_CS,"Screen");

(非常感谢t.niese,Lightness Races in Orbit和Jan Hudec)