Hallo Zusammen Ich möchte in meinenm PIC32 Projekt eine Struct-Variable in mehreren *.c verwenden. Mit dem PIC18 ist das kein Problem hier funktioniert es so. im main.c habe ich folgendens stehen struct { unsigned char F; unsigned char A; unsigned char B; } ucPufDatIn[20]; und in einer *.h habe ich das stehen extern struct { unsigned char F; unsigned char A; unsigned char B; } ucPufDatIn[20]; und diese *.h rufe ich aus den verschiedenen *.c auf. Beim PIC32 kommt folgender Fehler Opt.h:79:5: note: previous declaration of 'stPerBgData' was here Kann mir bitte jemand helfen. Danke.
Klatec schrieb: > Kann mir bitte jemand helfen. Danke. Als erstes gibst du dem struct Datentyp mal einen eigenen Namen.
1 | struct InputBuffer { |
2 | unsigned char F; |
3 | unsigned char A; |
4 | unsigned char B; |
5 | };
|
Und erst davon legst du dann ein Array an
1 | struct InputBuffer ucPufDatIn[20]; |
(und da siehst man jetzt auch, warum dieses Prefäxzeugs unsinnig ist. PufDatIn ist vom Datentyp Array of struct InputBuffer und nicht vom Datentyp unsigned char.) Die Strukturdefinition und die extern Version des Arrays kommen ins Header File, so wie immer "und in einer *.h"
1 | struct InputBuffer { |
2 | unsigned char F; |
3 | unsigned char A; |
4 | unsigned char B; |
5 | };
|
6 | |
7 | extern struct InputBuffer ucPufDatIn[20]; |
und in der main.c inkludierst du diese 'einer *.h' (damit du die Strukturdefinition zur Verfügung hast) und definierst dann auch das Array, so dass es tatsächlich angelegt wird main.c
1 | #include "einer *.h" |
2 | |
3 | struct InputBuffer ucPufDatIn[20]; |
4 | |
5 | int main() |
6 | {
|
7 | ....
|
8 | }
|
anonyme Strukturen sind (zumindest für dich am Anfang) in den wenigsten
Fällen sinnvoll. Gib dem Zeug einen Namen, dann kannst du es auch öfter
verwenden, weil du dich darauf beziehen kannst.
> Opt.h:79:5: note: previous declaration of 'stPerBgData' was here
Und was hat diese Fehlermeldung jetzt mit dem zu tun, was du präsentiert
hast?
Hallo Karl Heinz Danke für deine Antwort. Wenn ich diese Variable (ucPufDatIn[20]) nur im Main.c verwende ist's ok, aber wenn ich sie in anderen *.c verwenden möchte dann kommt eine Fehlermeldung dass es sie nicht gibt, dafür habe ich in der opt.h diese mit extern ... eingetragen (so wie beim PIC18, wo es so funktioiert)und ab diesen Zeitpunkt kommt die angegebenen Fehlermeldung. Aber ich werde deine Vorschlag umsetzen. Danke nochmals. Lg. Johann K.
Hallo KH Danke nochmals, so funktionierts, aber das brauch ich dir ja nicht zu sagen, das weiß du natürlich. Ich bin nicht der überdrüber Programmierer, ich kämpfe mich von einem Problem zum anderen und bin froh das ich immer wieder Unterstützung erhalte. Danke. Lg. Johann K.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.