질문 : How to create a cairo_t on a Gtk 2 window의 조언을 GTK 2.0 응용 프로그램에 구현하려고하는데 그 결과에 당황 스럽습니다. 오류 출력은동일한 유형이 일치하지 않는 이유
planes_view.c: In function ‘draw_lines_planes’:
planes_view.c:145:33: warning: passing argument 1 of ‘gdk_cairo_create’ from incompatible pointer type [enabled by default]
cr = gdk_cairo_create((struct GdkDrawable *)(view->drawing_area));
^
In file included from /usr/include/gtk-2.0/gdk/gdk.h:33:0,
from /usr/include/gtk-2.0/gtk/gtk.h:32,
from planes_view.h:35,
from planes_view.c:34:
/usr/include/gtk-2.0/gdk/gdkcairo.h:33:10: note: expected ‘struct GdkDrawable *’ but argument is of type ‘struct GdkDrawable *’
cairo_t *gdk_cairo_create (GdkDrawable *drawable);
^
입니다. 두 충돌 유형은 동일합니다. 어떻게 이럴 수있어? 아마도 같은 이름의 두 가지 유형일까요? 그렇더라도, 나는이 일을 올바르게하는 방법을 알아야합니다.
기분을 상하게하는 라인은 원래
cr = gdk_cairo_create(view->drawing_area);
이었다 그리고 불만 도면 영역의 선언 타입이 GtkWidget *는 것을, 그래서 따라서 정상적인 배역을 시도 : 위의 결과
cr = gdk_cairo_create((struct GdkDrawable *)(view->drawing_area));
을 .
최소한의 편집 가능한 예로 잘라낼 수 있습니까? (내 직감적 인 본능은 구조체가 호환되지 않는다는 것을 알려주지 만, 여러분이 보게 될 실수는 아니라고 생각합니다.) – tabstop
키워드 "struct"를 삭제하려고 시도합니다. GdkDrawable은 이미 typedef입니다. –
GtkWidget은 GdkDrawable이 아닌 무언가에 캐스팅 할 수 없습니다. 당신이 원하는 GdkDrawable은 아마도'view-> drawing_area-> window' 일 것입니다. 그러나 원래 응답에서했던 것,'widget-> window' (expose 핸들러의 첫 번째 인자가 widget이라고 가정 할 때)를하지 않을까요? ... 사실 이제 나는 그것에 대해 생각한다 :'gtk_widget_get_window (widget)'이 최선의 방법 일 것이다. – jku