2017-10-29 12 views
0

GTK 프로그래밍을 배우려고합니다. 나는 c로 간단한 프로그램을 썼다. 나는 gtk_label_set_selectable() 함수에 레이블에 대한 포인터를 전달하기 위해 노력하고 있어요,하지만 난이 경고를 얻을 :호환되지 않는 포인터 유형 인 'gtk_label_set_selectable'의 인수 1을 전달합니다.

../src/Calculator.c:35:28: warning: passing argument 1 of ‘gtk_label_set_selectable’ from incompatible pointer type [-Wincompatible-pointer-types] 
    gtk_label_set_selectable(lable,1); 
          ^~~~~ 
: 나는 이클립스 CDT를이 컴파일 Whene

#include <gtk/gtk.h> 
#include <stdlib.h> 

long i = 1; 

void showadd(short u,GtkWidget *l) 
{ 
    char * s; 
    s = (char*)malloc(20); 
    sprintf(s,"%ld",++i); 
    gtk_label_set_text(GTK_LABEL(l),s); 
} 

int main (int argc, char *argv[]) 
{ 
    gtk_init(&argc,&argv); 
    GtkWidget * win,* lable, * addButton,* SubstractButton,*box; 

    win = gtk_window_new(GTK_WINDOW_TOPLEVEL); 

    addButton = gtk_button_new_with_label("+"); 
    lable = gtk_label_new("1"); 
    box = gtk_vbox_new(0,0); 

    g_signal_connect(win,"delete-event",G_CALLBACK(exit),NULL); 
    g_signal_connect(addButton,"clicked",G_CALLBACK(showadd),(gpointer)lable); 
    gtk_label_set_selectable(lable,1); //getting warring here 

    gtk_container_add(GTK_CONTAINER(win),box); 
    gtk_box_pack_start(GTK_BOX(box),lable,1,0,0); 
    gtk_box_pack_start(GTK_BOX(box),addButton,1,0,0); 
    gtk_widget_show_all(win); 

    gtk_main(); 
} 

내가 콘솔에서이 경고를을

이 경고를 무시해야합니까? 그렇지 않다면 그걸 버리려면 어떻게해야합니까? 그리고 그렇다면 어떻게하면 식으로 사라질 수 있습니다.

+1

'GtkLabel *'을 기대하며'GtkWidget *'을 전달하고 있습니다. 컴파일러가 실수로 실수를 저지른 것을 알려줍니다. 그것을 변경하여'GtkLabel *'을 전달하십시오. –

+0

Tom은 그것을'GtkLabel * lable;이라고 선언하는 것을 의미합니다. –

답변

1

GTK에서는 위젯 유형에주의해야합니다. gtk_*_new() 기능 또한 GTK_LABEL(label)을 사용하여 주조 필요가 GtkLabel*을 기대하는 기능에 GtkWidget*를 사용하려면 등 GtkWidget 대신 GtkLabel

에 대한 포인터를 반환하기 때문에

는 일반적으로 만 GtkWidget* 대신보다 전문적인 유형으로 사용됩니다.

GTK_CONTAINER()GTK_BOX()에 전화 할 때 이미 사용하고있는 메커니즘입니다.