Forum: PC-Programmierung GTK2/C, Zeiger auf Strukturen über mehrere Funktionen


von Andreas F. (bazo)


Lesenswert?

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

von Kaj (Gast)


Lesenswert?

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
}

von Andreas F. (bazo)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.