2014-01-26 240 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鄔達克)