GTK2/C, Zeiger auf Strukturen über mehrere Funktionen

OP #4989437
Bei mir haberts gerade an dem Verständnis:
GTK2-Applikation mit Spin-Button, die dazugehörigen ENTRY-Felder und die 
Spin-Buttons will ich zur Laufzeit verändern.

Da ganze aus der Unterfunktion für das Zeichnen der Kurve, diese wir 
aufgerufen wenn:
Zeitgesteuert die Werte vom Meßgerät geholen werden
Die Werte aus einem File eingelesen werden
Ausgabe als PDF/PNG

Aufbau ist wie folgt
Main -> Callback oder Timerfunction -> Einlesefunktion File/Bus oder 
eine der drei Zeichenfunktion.

Codeausschnitt:

typedef struct {
  GtkWidget *window;
  GtkWidget *gw_set_maxtime;
  GtkWidget *gw_set_mintime;
  GtkWidget *gw_set_average_window;
  GtkWidget *gw_set_max;
  GtkWidget *gw_set_min;
  GtkWidget *gw_max;
  GtkWidget *gw_min;
  GtkWidget *gw_maxtime;
  GtkWidget *gw_menuitem_start;
  GtkAdjustment *adj_set_max;
  GtkWidget *filesel;
} r2101_data;

main:

  r2101_data wg_data;
...
  adj_set_maxtime = (GtkAdjustment *) gtk_adjustment_new 
(1,0,1000000,1,10,0);
  gw_set_maxtime = gtk_spin_button_new(adj_set_maxtime,0,0);
  gtk_signal_connect(GTK_OBJECT(gw_set_maxtime), 
"value-changed",GTK_SIGNAL_FUNC(screen_refresh),(gpointer*) &wg_data)
...
  wg_data.gw_set_maxtime = gw_set_maxtime;

Callback

void screen_refresh(GtkWidget *widget, r2101_data *data) {
  gint width,  height;            // Window width & height

  cairo_t *cr;

  cr = gdk_cairo_create(widget->window);

  gdk_drawable_get_size(widget->window, &width, &height);

  plot(cr, width,height,?????);

  cairo_destroy(cr);
}

void plot(cairo_t *cr, gint  width, gint height, r2101_data *data) {

  gdouble    MAX_X = record_counter;  // max X scale

  MAX_X = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->set_maxtime));
}


Der Compilier meldet aber:
racal2101-plot.c:574:56: error: ‘r2101_data {aka struct <anonymous>}’ 
has no member named ‘set_maxtime’

Wie muss ich die Funktion plot korrekt deklarieren und dann aufrufen? 
Über eine Ebene geht das.

Gruß Andreas
Gast #4989440
Andreas F. schrieb:
> Der Compilier meldet aber:
> racal2101-plot.c:574:56: error: ‘r2101_data {aka struct <anonymous>}’
> has no member named ‘set_maxtime’
Das Ding heisst ja auch
1
gw_set_maxtime
und nicht
1
set_maxtime
aber das sagt dir der Compiler ja.

Und aufrufen must du das dann so:
1
void screen_refresh(GtkWidget *widget, r2101_data *data) {
2
  ...
3

4
  plot(cr, width, height, data);
5

6
  ...
7
}
OP #4989577
Kaj schrieb:
> Andreas F. schrieb:
>> Der Compilier meldet aber:
>> racal2101-plot.c:574:56: error: ‘r2101_data {aka struct <anonymous>}’
>> has no member named ‘set_maxtime’
> Das Ding heisst ja auch
>
1
> gw_set_maxtime
2
>
> und nicht
>
1
> set_maxtime
2
>
> aber das sagt dir der Compiler ja.

Asche über mein Haupt:
Das kommt davon wenn man im Code Fehler sucht, anfängt Variablen 
umzubennen und dann nicht irgendwann den Überblick verliert.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.