【问题标题】:Void pointer to object pointer指向对象指针的空指针
【发布时间】:2014-01-26 18:09:58
【问题描述】:

我正在用 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* 指针,然后对 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++。
  • 我不确定我是否正确理解了您的问题,但我认为您正在寻找一个类的 前向声明 (class Layout;)
  • 转发声明是解决方案。
  • 好的,我只添加类布局;在 Widget.h 中,它会工作吗?我应该对 SPI_TFT 屏幕也做同样的事情,还是应该使用类似 extern 的东西?

标签: c++ pointers mbed


【解决方案1】:

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

然后对于 TFT 类,我必须使用 extern SPI_TFT Screen;,在 main.cpp 中我使用了 SPI_TFT Screen(LCD_SDI, LCD_SDO, LCD_SCK, LCD_CS,"Screen");

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

【讨论】:

    猜你喜欢
    • 2023-02-09
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    相关资源
    最近更新 更多