Forum: Compiler & IDEs Probleme bei Übergabe von Pointer auf Struct AVR-GCC


von Thomas (Gast)


Lesenswert?

Ich habe eine Struktur:
1
struct Pumpe
2
{
3
  uint8_t  max;    
4
  uint8_t status;    
5
  uint8_t* pwm;    
6
};


Einen Funktionsprototypen
1
void initPumps(struct Pumpe *pt_pump);

Die dazugehörige Funktion:
1
void initPumps(struct Pumpe *pt_pump)
2
{
3
  pt_pump->max = 100;
4
}



Sowie in der Main-Funktion folgende Initialisierung und den 
anschließenden Aufruf der oben beschriebenen Funktion.
1
struct Pumpe PumpeA, PumpeB;
2
3
initPumps(&PumpeA);


Eigentlich sollte es funktionieren, tut es aber nicht. Es wird beim 
Kompilieren mit folgender Fehlermeldung quittieret:

dereferencing pointer to incomplete type

Was sich auf
1
pt_pump->max = 100;
 bezieht.

Zusätzlich gibt es folgende Warnungen die sich auf die selbe 
Programmzeile beziehen, mir aber auch nicht bei der Lösung des Problems 
weiter helfen:

Warning  2  'struct Pumpe' declared inside parameter list [enabled by 
default]

Warning  3  its scope is only this definition or declaration, which is 
probably not what you want [enabled by default]


Ich habe jetzt schon Stundenlang herum probiert und im Netz gesucht. 
Finde aber keine Lösung.

Hat jemand eine Idee?

Thomas

von Thomas (Gast)


Lesenswert?

Ergänzung dazu:

Wenn ich alles in eine Datei packe funktioniert es. Ursprünglich und so 
soll es eigentlich auch sein ist

Pumpe.h

->Struct und Prototyp

Pumpe.c

->Die Funktion die die Probleme verursacht


und der Rest in der Datei in der Main ist.

von Dr. Sommer (Gast)


Lesenswert?

Du musst am Anfang der Pumpe.c insbesondere vor der Funktion den 
Header inkludieren, denn sonst kennt Compiler ja dein struct gar nicht.

von Rolf M. (rmagnus)


Lesenswert?

Thomas schrieb:
> dereferencing pointer to incomplete type

Das beudeutet, daß an dieser Stelle die vollständige Definition des Typs 
nicht bekannt ist. Somit ist ein Member-Zugriff nicht möglich, da der 
Compiler nicht einmal weiß, ob es dieses Member in der Struktur 
überhaupt gibt, geschweige denn, wo oder wie groß es ist.

> Zusätzlich gibt es folgende Warnungen die sich auf die selbe
> Programmzeile beziehen, mir aber auch nicht bei der Lösung des Problems
> weiter helfen:
>
> Warning  2  'struct Pumpe' declared inside parameter list [enabled by
> default]

Das heißt, daß der Compiler den Typ überhaupt nicht kennt. Dadurch wird 
aus dem Funktionsparameter automatisch eine Deklaration des Typs 
abgeleitet, so daß der Compiler ab da zumindest mal davon ausgeht, daß 
ein Typ dieses Namens existiert.

> Warning  3  its scope is only this definition or declaration, which is
> probably not what you want [enabled by default]

Da der Namen des Typs implizit im Funktionsparameter deklariert wurde, 
ist er auch nur innerhalb der Funktion gültig. Wie der Compiler schon 
sagt, will man das in der Regel so nicht.

von Daniel A. (daniel-a)


Lesenswert?

Derartige Räzel führen mit gcc -E zur Erleuchtung.

von Falk B. (falk)


Lesenswert?

#include "Pumpe.h"

von Thomas (Gast)


Lesenswert?

Hallo und Danke an alle. Man sollte einfach nicht mehr erwarten, das man 
nach 15h vor dem Code und nachts um halb zwei noch seine eigenen dummen 
Fehler findet.

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.