[GTK] Problem mit g_object_new()

Wuschel

Mitglied
Hi,

Ich hab ein Problem mit einem Beispiel aus dem Buch Gnome 2.0 vom Matthias Warkus (nebenbei, bin ein gtk Anfänger). Ich hab das erste GTK+ Beispiel ausprobiert und schon bekomme ich folgende Fehlermeldung:

von MinGW Developer Studio
Code:
Compiling source file(s)...
main.cpp
main.cpp: In function `int main(int, char**)':
main.cpp:35: error: invalid conversion from `void*' to `GtkWidget*'
main.cpp:40: error: invalid conversion from `void*' to `GtkButton*'
main.cpp:55:2: warning: no newline at end of file

3-1-3.exe - 2 error(s), 1 warning(s)

Programm (Zeilen sind makiert):
Code:
/* -*-coding: utf-8;-*- */
/* gtk.hallo.c -- klassisches GTK+-Hallo-Programm */

#include <gtk/gtk.h>

void hallo(GtkWidget *widget, gpointer daten)
{
	g_print("Hallo, Welt!\n");
}

gint delete_event(GtkWidget *widget, GdkEvent event, gpointer daten)
{
	return FALSE;
}

void ende(GtkWidget *widget, gpointer daten)
{
	gtk_main_quit();
}

int main(int argc, char **argv)
{
	GtkWidget *fenster;
	GtkButton *knopf;
	
	gtk_init(&argc, &argv);
	
	fenster = g_object_new(GTK_TYPE_WINDOW,
            "title", "Key-Ident 0.1",
            "default-width", 400,
            "default-height", 300,
            "resizable", TRUE,
            "window-position", GTK_WIN_POS_CENTER,
            "border-width", 5,
#35             NULL); 
						   
	g_signal_connect(fenster, "delete_event", G_CALLBACK(delete_event), NULL);
	g_signal_connect(fenster, "destroy", G_CALLBACK(ende), NULL);
	
#40	knopf = g_object_new(GTK_TYPE_BUTTON, "label", "_Hallo, Welt!/nHier draufdrücken", "use-undeline", TRUE, NULL);
	
	g_signal_connect(knopf, "clicked", G_CALLBACK(hallo), NULL);
	
	g_signal_connect_swapped(knopf, "clicked", G_CALLBACK(gtk_widget_destroy), fenster);
	
	gtk_container_add(GTK_CONTAINER(fenster), GTK_WIDGET(knopf));
	gtk_widget_show_all(GTK_WIDGET(fenster));
	
	
	gtk_main();
		
	
	return 0;
	
}

wäre schön, wenn mir da einer helfen könnte, hab schon überall nachgeschaut :'(

gruss,
David
 
Also ich hab von GTK eigentlich keine Ahnung, aber das Problem ist aus der Fehlermeldung des Compilers ersichtlich:
Die Funktion "g_object_new" ist mit dem Rückgabewert void * (void Pointer) deklariert.
Ergo musst du auch ein void* Pointer annehmen (was eigentlich fast unsinnig wäre) oder was richtig wäre, du musst "casten":
Code:
fenster = (GtkWidget *)g_object_new(...);

// und

knopf = (GtkButton *)g_object_new(...);

Ich denke das sollte auf jedem Fall in einem GTK-Buch drinstehen. Ansonsten sollte das auch in der GTK Doku drinstehen.

Daniel
 
Zurück