从不兼容的指针类型传递'gtk_label_set_selectable'的参数1

时间:2017-10-29 09:51:24

标签: c eclipse gtk label warnings

我正在尝试学习GTK编程。我在c中写了一个简单的程序。我试图将指向标签的指针传递给gtk_label_set_selectable()函数,但是我得到了这个警告:

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

我在eclipse CDT中编译它我在控制台中收到此警告:

../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 个答案:

答案 0 :(得分:1)

在GTK中,您需要注意小部件的类型。

通常只使用GtkWidget*而不是更专业的类型,因为gtk_*_new()函数也会返回指向GtkWidget而非GtkLabel等的指针。

要在期望GtkWidget*的函数中使用GtkLabel*,您需要使用GTK_LABEL(label)投射。

这是您拨打GTK_CONTAINER()GTK_BOX()时已经使用的机制。