2014-01-26 2 views
0

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 클래스를 포함 할 필요가

?

#ifndef DISPLAY_H 
#define DISPLAY_H 

static SPI_TFT Screen(LCD_SDI, LCD_SDO, LCD_SCK, LCD_CS,"Screen"); 

#endif 

을하지만 난 정말이 이런 식으로 뭔가를 할 수있는 올바른 방법이라고 생각하지 않습니다 지금은 그냥에서와 Display.h 있습니다.

도움 주셔서 감사합니다.

+4

(당신이 아주 많이 t.niese, 밝기 경주 궤도와 얀 허덱 감사)했다 C ** XOR ** C++? 'void *'의 사용법은 두 언어에서 근본적으로 다릅니다 **. . ') –

+0

죄송합니다, 그것은 C++ (이 항목에서 C++의 것을 추가 – Jannes

+2

내가 제대로 질문을 이해 있는지 확실하지 않습니다하지만 난 당신이 클래스의 _forward declaration_ 찾고있는 생각 ('클래스 레이아웃입니다 .이 솔루션은 좋아 –

답변

0

솔루션이었다 : 각 클래스에서 앞으로 선언을 사용하여.

class Layout; 그런 다음 TFT 클래스 내가 extern SPI_TFT Screen;을 사용했다 나의 MAIN.CPP에서 나는 SPI_TFT Screen(LCD_SDI, LCD_SDO, LCD_SCK, LCD_CS,"Screen");

그래서

관련 문제