PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [GTK] Warnungen - aber wieso und warum?



nul
16-02-2005, 13:48
Ich versteh das ganze ueberhaupt nicht. Ich meine, es kompiliert und laesst sich auch korrekt ausfuehren. Es handelt sich dabei um ff. Part meines Codes:


int
main( int argc, char** argv )
{
GtkVBox* vertical_box;
GtkTextTagTable* tags;
GtkTextView* text_view;
GtkItemFactory* items;
GtkAccelGroup* accl;
GtkScrolledWindow* scroll_window;
GtkAdjustment* horizontal_adj;
GtkAdjustment* vertical_adj;
GtkWidget* menu_bar;
gint menu_size = sizeof(menu)/sizeof( menu[0] );

gtk_init( &argc, &argv );
main_window = g_object_new( GTK_TYPE_WINDOW,
"title", "editor",
"default-width", 350,
"default-height", 400,
NULL);

g_signal_connect( main_window,
"delete_event",
G_CALLBACK(editor_delete_event),
NULL );

accl = gtk_accel_group_new();
items = gtk_item_factory_new( GTK_TYPE_MENU_BAR, "<main>", accl );
gtk_item_factory_create_items( items, menu_size, menu, NULL );
menu_bar = gtk_item_factory_get_widget( items, "<main>" );

tags = gtk_text_tag_table_new();
text_buffer = gtk_text_buffer_new(tags);
text_view =
(GtkTextView*)gtk_text_view_new_with_buffer( text_buffer );

horizontal_adj = gtk_adjustment_new( 0.0,
0.0,
100.0,
1.0,
1.0,
450.0 ); /* 402 */
vertical_adj = gtk_adjustment_new( 0.0,
0.0,
100.0,
1.0,
1.0,
350.0 ); /* 408 */
scroll_window = gtk_scrolled_window_new( horizontal_adj,
vertical_adj ); /* 410 */
gtk_scrolled_window_add_with_viewport( scroll_window,
(GtkWidget)text_view );/* 412 */

vertical_box = (GtkVBox*)g_object_new( GTK_TYPE_VBOX, NULL );

gtk_box_pack_start( GTK_BOX( vertical_box ),
GTK_WIDGET( menu_bar),
FALSE, FALSE, 0);

gtk_box_pack_start_defaults( GTK_BOX( vertical_box ),
GTK_WIDGET( scroll_window ) );

gtk_container_add( GTK_CONTAINER( main_window ),
GTK_WIDGET( vertical_box ) );

gtk_widget_show_all( GTK_WIDGET(main_window) );

gtk_main();

return 0;
};
und ff. Fehlermeldung:

editor.c: In function `editor_past_text':
editor.c:330: warning: implicit declaration of function `strlen'
editor.c: In function `main':
editor.c:402: warning: assignment from incompatible pointer type
editor.c:408: warning: assignment from incompatible pointer type
editor.c:410: warning: assignment from incompatible pointer type
editor.c:412: error: conversion to non-scalar type requested

die Zeile 330 bezieht sich hierrauf:

void
editor_past_text( GtkWidget* widget, gpointer data )
{
if ( cut_copy_text != NULL )
{
gtk_text_buffer_insert_at_cursor( text_buffer,
cut_copy_text,
strlen((char*) /* 330 */
cut_copy_text) );
}
};
ist aber nicht so wichtig.

Vollstaendig missverstaendlich sind mir aber die die Fehlermeldungen von 408 bis 412, hat da jemand eine Idee warum?

mfg nul

jeebee
16-02-2005, 19:35
also:

funktion main:
Zeilen 402, 408 : deklariere die variablen "horizontal_adj" und "vertical_adj" als GtkObject* und nicht als GtkAdjustment*

Zeilen 410, 412 : deklariere die variable "scroll_window" als GtkWidget* und nicht als GtkScrolledWindow*

--> ist zwar nicht ganz logisch, aber du musst alle variablen für gtk-objekte als GtkWidget* oder GtkObject* deklarieren...

funktion editor_past_text:
hast du ein "#include <string.h>"?

MfG

[edit]
habs noch durchgetestet:


#include <gtk/gtk.h>

int main(int argc, char *argv[]) {
GtkWidget *main_window;
GtkWidget *menu;
GtkTextBuffer *text_buffer;
GtkVBox* vertical_box;
GtkTextTagTable* tags;
GtkTextView* text_view;
GtkItemFactory* items;
GtkAccelGroup* accl;
GtkWidget* scroll_window;
GtkObject* horizontal_adj;
GtkObject* vertical_adj;
GtkWidget* menu_bar;
gint menu_size = sizeof(menu)/sizeof( menu[0] );

gtk_init( &argc, &argv );
main_window = g_object_new( GTK_TYPE_WINDOW,
"title", "editor",
"default-width", 350,
"default-height", 400,
NULL);


accl = gtk_accel_group_new();
items = gtk_item_factory_new( GTK_TYPE_MENU_BAR, "<main>", accl );
gtk_item_factory_create_items( items, menu_size, menu, NULL );
menu_bar = gtk_item_factory_get_widget( items, "<main>" );

tags = gtk_text_tag_table_new();
text_buffer = gtk_text_buffer_new(tags);
text_view =
(GtkTextView*)gtk_text_view_new_with_buffer( text_buffer );

horizontal_adj = gtk_adjustment_new( 0.0,
0.0,
100.0,
1.0,
1.0,
450.0 ); /* 402 */
vertical_adj = gtk_adjustment_new( 0.0,
0.0,
100.0,
1.0,
1.0,
350.0 ); /* 408 */
scroll_window = gtk_scrolled_window_new( GTK_ADJUSTMENT(horizontal_adj),
GTK_ADJUSTMENT(vertical_adj) ); /* 410 */
gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW(scroll_window),
GTK_WIDGET(text_view) );/* 412 */

vertical_box = (GtkVBox*)g_object_new( GTK_TYPE_VBOX, NULL );

gtk_box_pack_start( GTK_BOX( vertical_box ),
GTK_WIDGET( menu_bar),
FALSE, FALSE, 0);

gtk_box_pack_start_defaults( GTK_BOX( vertical_box ),
GTK_WIDGET( scroll_window ) );

gtk_container_add( GTK_CONTAINER( main_window ),
GTK_WIDGET( vertical_box ) );

gtk_widget_show_all( GTK_WIDGET(main_window) );

gtk_main();

return 0;
}

die roten Zeilen sind zu deiner Version verschieden, abgesehen von ein paar zusätzlichen Variablendeklarationen...

nul
17-02-2005, 09:39
Hm, stimmt, so funktionierts, und #include <string.h> hab ich tatsaechlich vergessen.
Naja, wenn man 2 Jahre Java lernen muss und dann wider mal was in c/GTK probiert ...
Wie verbind ich eigentlich jetzt noch die Scrollbalken vom GtkScrolledWidget mit dem GtkTextView (oder GtkTextBuffer), kannst du mir da vielleicht einen kleinen Tip geben?

mfg nul

jeebee
17-02-2005, 15:51
nee, ich bin eigentlich selber noch c/gtk anfänger, hatte aber dieselben fehler bei anderen elementen auch schon ...

nul
17-02-2005, 16:04
Ich mach eigentlich auch erst seit 4 Tagen GTK, aber es laeuft bisher recht gut.
Nur die Beschreibungen der Klassen koennte um einen Tick besser sein. Und wie man die Gnome-Bibliotheken nutzt, dazu findet man fast ueberhaupt keine Anleitungen.

Hab mir mal die "GNOME Programming Guidelines" runtergeladen, so ein Programmierstandard find ich echt gut.

Naja, wer Rastet der Rostet, also such ich mal ein wenig weiter!

mfg nul

\Edit: c hab ich zwar noch einigermassen in Erinnerung, aber nach 3 Jahren ohne tut man sich halt auch ein wenig schwer.