Передача массива указателей в функцию, связанную с GTK - PullRequest
0 голосов
/ 22 апреля 2011

У меня есть следующий массив:

GtkWidget*GtkEntrys[3];

Он создается и т. Д., И теперь я хочу передать ему функцию, поэтому я делаю:

g_signal_connect(G_OBJECT(Buttons[0]),"clicked",G_CALLBACK(CreateProfile),EntryBoxes);

void CreateProfile(GtkWidget* widget, gpointer**data)
{
    if (gtk_entry_get_text_length(GTK_ENTRY(data[0]))== 0) std::cout << "Empty" << std::endl;
}

Но я получаю ошибку:GTK_IS_ENTRY FAILED

Ответы [ 2 ]

1 голос
/ 22 апреля 2011

Я предполагаю, что

 g_signal_connect(G_OBJECT(Buttons[0]),"clicked",G_CALLBACK(CreateProfile),EntryBoxes);

EntryBoxes на самом деле GtkEntrys определено ранее.То, что вы передаете там, это не указатель на массив, а указатель на первый элемент массива.Таким образом, вы должны привести gpointer к указателю на такой элемент, то есть к GtkEntry* (не GtkEntry**)

void CreateProfile(GtkWidget* widget, gpointer data) {
    GtkEntry* entries = (GtkEntry*) data;
    if (gtk_entry_get_text_length(GTK_ENTRY(entries[0]))== 0)
        do_something();
}
0 голосов
/ 22 апреля 2011
void CreateProfile(GtkWidget* widget, gpointer data) {
    GtkEntry** entries = (GtkEntry**) data;
    if (gtk_entry_get_text_length(GTK_ENTRY(entries[0]))== 0) do_something();
}

Второй аргумент обратного вызова должен быть gpoitner.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...