Forum: PC-Programmierung Getter funktion für Struktur funktioniert nicht


von Felix (Gast)


Lesenswert?

guten morgen,
ich habe ein Simulink modell, welches mir eine output struktur gibt.
diese kann ich in meinem code einlesen

Simulink.h
1
typedef struct
2
{
3
 output_member_1;
4
 output_member_2;
5
 output_member_3;
6
 ...
7
 ...
8
}SLOutput_ts;

file1.c
1
static SLOutput_ts* output_ps;
2
...
3
value1 = output_ps->output_member_1;

Das funktioniert auch. Jetzt möchte ich diese Werte aber auch mit einer 
getter funktion anderen files zur verfügung stellen
file1.h
1
const SLOutputs_ts* getSimulinkOutput_ps(void)
file1.c
1
const SLOutputs_ts* getSimulinkOutput_ps(void)
2
{
3
 return &output_ps;
4
}
file2.c
1
value = getSimulinkOutput_ps()->output_member_1;
2
...
3
...
Allerdings bekomme ich hier immer nur müll raus (meistens 0).
output_ps kann ich aber im Debugger sehen, dass dort die richtigen Werte 
drinn stehen.

Wie bekomme ich die Werte den anderen dateien zur verfügung gestellt?

von Oliver S. (oliverso)


Lesenswert?

Felix schrieb:
>const SLOutputs_ts* getSimulinkOutput_ps(void)
>{
> return &output_ps;
>}

Das solltest du dir nochmals ganz genau ansehen.

Oliver

: Bearbeitet durch User
von Rolf M. (rmagnus)


Lesenswert?

Oliver S. schrieb:
> Das solltest du dir nochmals ganz genau ansehen.

Und die Compilerwarnungen einschalten und lesen.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Felix schrieb:
> static SLOutput_ts* output_ps;
> ...
> value1 = output_ps->output_member_1;

Wo allokierst Du überhaupt den Speicherplatz für output_ts? Ich sehe da 
nur einen Pointer.

Wenn, dann:
1
static SLOutput_ts output_ps;  // kein Pointer!
2
...
3
value1 = output_ps.output_member_1;

Dann wäre auch das Zurückgeben des Pointers in file1.c okay.

von Felix (Gast)


Lesenswert?

Habe nochmal genauer im Code nachgesehen und gesehen, dass ich was 
vergessen habe.
file1.c
1
static SLOutput_ts* output_ps;
2
3
function()
4
{
5
  static SLCode_ExternalOutputs  rtwY_s;
6
  output_ps = &rtwY_s.Output
7
8
  value = output_ps->output_member_1;
9
}
Simulink.h
1
typedef struct {
2
  SLOutputs_ts Output;
3
} SLCode_ExternalOutputs

von Oliver S. (oliverso)


Lesenswert?

Je nun, der Fehler liegt neben dem oben angespochenen immer noch in 
Zeile 42.

Oliver

: Bearbeitet durch User
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.