2017-10-29 13 views
0

私はGTKプログラミングを学ぼうとしています。私はcで簡単なプログラムを書いた。私はgtk_label_set_selectable()関数にラベルへのポインタを渡すようにしようとしていますが、私はこの警告を得る:互換性のないポインタ型の 'gtk_label_set_selectable'の引数1を渡します。

#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(); 
} 

私は日食CDTでこれをコンパイルWhene私はコンソールでこの警告を得る:

../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); 
          ^~~~~ 

この警告は無視する必要がありますか?そうでない場合は、私はそれを遠ざけるために何ができますか?そして、はいの場合、私はどのように日食で消えることができます。

+1

これは 'GtkLabel *'を想定しており、 'GtkWidget *'を渡しています。コンパイラはあなたが間違いをしたことを知らせています。これを変更して 'GtkLabel *'を渡します。 –

+0

Tomはそれを 'GtkLabel * lable;'として宣言します。 –

答えて

1

GTKでは、ウィジェットの種類に注意する必要があります。

通常のみGtkWidget*gtk_*_new()機能もGtkWidget代わりのGtkLabelへのポインタを返すので、代わりに、より特殊なタイプの使用されているなど

あなたがGTK_LABEL(label)を使用してキャストする必要がGtkLabel*を期待機能でGtkWidget*を使用します。

これは、GTK_CONTAINER()GTK_BOX()に電話したときに既に使用しているメカニズムです。

関連する問題