GTK+ Programmierung

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
BeS
Moderator
Beiträge: 3236
Registriert: 17.04.2002 18:30:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Stuttgart
Kontaktdaten:

GTK+ Programmierung

Beitrag von BeS » 17.01.2004 18:51:16

Hallo,
ich arbeite gerade an einem GTK+ Programm und habe ein Problem.
Die GUI habe ich mit glade erstellt und binde dann die XML Datei in mein Programm ein.
Ich lese alle widgets die ich im Programm brauche aus und speichere sie in einem array:

Code: Alles auswählen

GtkWidget *widget[NUMBER_OF_WIDGETS];
Das array habe ich in der main.c global definiert. Jetzt muß ich natürlich auch von anderen Dateien auf die widgets zugreifen können, also habe ich sie dort als extern definiert:

Code: Alles auswählen

extern GtkWidget *widget[NUMBER_OF_WIDGETS];
Wenn ich jetzt aber in der Datei wo es als extern definiert ist auf ein SpinButton zugreifen will:

Code: Alles auswählen

gtk_spin_button_set_range(GTK_SPIN_BUTTON(widget[REACHED_SPINBUTTON]),
                                             1,
                                             90);
bekomme ich diese Fehlermeldung beim compilieren:

Code: Alles auswählen

 cannot convert to a pointer type
Ich kann damit irgendwie nichts anfangen. Ich vermute mal es liegt irgendwie an der extern-definition.

Habt ihr eine Idee was da nicht stimmen könnte?

Danke!
Deine Unterstützung für Freie Software kostet dich nur wenige Minuten: www.fsfe.org/support

Ich spreche von Freier Software!

Benutzeravatar
HelsAett
Beiträge: 749
Registriert: 18.03.2003 18:25:00

Beitrag von HelsAett » 21.01.2004 12:21:24

ich weiss nicht ob dir das weiterhilft, ich bin noch am anfang der gtk programmierung

Code: Alles auswählen

extern GtkWidget *widget[NUMBER_OF_WIDGETS]; 
kenne ich nur in folgender form

Code: Alles auswählen

extern GtkWidget *widget();
festlegen möchte ich mich da aber nicht, ersetz doch mal probehalber [] durch ()

gruss helsaett

Benutzeravatar
BeS
Moderator
Beiträge: 3236
Registriert: 17.04.2002 18:30:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von BeS » 21.01.2004 12:44:23

Hallo,
danke für deine Antwort!
Das mit den eckigen-Klammern sollte schon stimmen, es ist ja ein array indem ich die widgets speichern wollte.
Ich habe diese Idee aber mittlerweile aufgegeben und die widgets in einem struct gespeichert, das funktioniert problemlos.
Deine Unterstützung für Freie Software kostet dich nur wenige Minuten: www.fsfe.org/support

Ich spreche von Freier Software!

Benutzeravatar
eC
Beiträge: 354
Registriert: 24.07.2002 13:34:13
Wohnort: karlsruhe

Re: GTK+ Programmierung

Beitrag von eC » 21.01.2004 13:09:16

BeS hat geschrieben:

Code: Alles auswählen

GtkWidget *widget[NUMBER_OF_WIDGETS];
Hi,

ich kenne mich nicht mit GTK+ aus,
ist es aber in C nicht so das Du entweder einen Array oder einen Pointer
definierst
Pointer:

Code: Alles auswählen

GtkWidget *widgetP;
Array

Code: Alles auswählen

GtkWidget widget[NUMBER_OF_WIDGETS];
Das was Du hast geht in dem Kontext wohl nicht.
Wenn Du dann einen Zeiger auf das Array willst mußt Du denn noch zuweisen

widgetP = &widget[0];

oder so, wobei das hier ein Zieger auf das erste Element im Array ist
:)

aber keine Garantie

8)

gruss

eC

Benutzeravatar
spiffi
Beiträge: 1128
Registriert: 09.08.2003 19:02:27

Re: GTK+ Programmierung

Beitrag von spiffi » 21.01.2004 13:51:35

eC hat geschrieben:ist es aber in C nicht so das Du entweder einen Array oder einen Pointer
definierst
Schon richtig, ein Array ist kein Pointer. Aber man kann in C durchaus auch Arrays von Pointer deklarieren (sprich jedes Element des Arrays ist ein Pointer):

Code: Alles auswählen

GtkWidget *widgets[10]
Oder einen Pointer auf ein Array:

Code: Alles auswählen

GtkWidget (*widget)[10]
eC hat geschrieben:Wenn Du dann einen Zeiger auf das Array willst mußt Du denn noch zuweisen
Er wollte aber keinen Zeiger auf ein Array, sondern ein Array von Zeigern. Und exakt das hat er auch deklariert.

Benutzeravatar
eC
Beiträge: 354
Registriert: 24.07.2002 13:34:13
Wohnort: karlsruhe

Re: GTK+ Programmierung

Beitrag von eC » 21.01.2004 13:57:18

spiffi hat geschrieben: Er wollte aber keinen Zeiger auf ein Array, sondern ein Array von Zeigern. Und exakt das hat er auch deklariert.
OK gebe mich geschlagen :)

Sollte wohl mal meine C Kenntnisse aufpolieren.


gruss

eC

Olaf Dietsche
Beiträge: 520
Registriert: 12.06.2003 23:18:50
Wohnort: Siegburg

Beitrag von Olaf Dietsche » 24.01.2004 23:21:21

Das hier

Code: Alles auswählen

#include <gtk/gtkwidget.h>
#include <gtk/gtkspinbutton.h>

void f()
{
	extern GtkWidget *widget[10];
	gtk_spin_button_set_range(GTK_SPIN_BUTTON(widget[5]), 1, 90);
}
funktioniert bei mir sowohl mit gtk 1.2 als auch 2.0 einwandfrei. Übersetzt habe ich das mit

Code: Alles auswählen

gcc `pkg-config --cflags gtk+-2.0` -c gsb.c
Sieht so aus als ob du noch ein anderes Problem hast.

Meine Konfiguration sieht so aus

Code: Alles auswählen

ii  gcc              3.3.2-1          The GNU C compiler
ii  libgtk1.2-dev    1.2.10-16        Development files for the GIMP Toolkit
ii  libgtk2.0-dev    2.2.1-6          Development files for the GTK+ library

Antworten