Dateiverwaltungs-Problem?

OP #2734871
Lesenswert?

Datei main.h:
1
int8_t flagSelectPID = 0, selectPID1 = 0;

Datei PIDControl.h:
1
extern int8_t selectPID1;
2
void selectPID(void);

Datei PIDControl.c:
1
#include "PIDControl.h"
2
void selectPID(void) {
3
  switch(selectPID1) 
4
  {
5
  ...
6
  ...
7
  }
8
}
Sollte doch eigentlich passen, oder?

Stattdessen kommt:
Error  6  'selectPID1' undeclared (first use in this function)
Error  5  expected '=', ',', ';', 'asm' or '__attribute__' before 
'selectPID1'

Mir scheint dass das Prob ausserhalb liegt... als ob auf main.h gar kein 
Bezug genommen würde...? Ich habe in PIDControl.h ein paar Deklarationen 
auskommentiert - was den Compiler völlig kalt ließ. Ich arbeite mit 
AVRStudio6 und habe die Dateien wie üblich zum Projekt hinzugefügt.
OP #2735398
Lesenswert?

>Vielleicht einfach mal ALLES in ein File kopieren(/posten).
Das ist genau das was ich nicht möchte.

>Mit 'extern int8_t selectPID1;' sagst du zwar, das die Variable irgendwo >anders 
erklärt wird, aber irgendwo musst du main.h schon inkludieren.
Hm. Das heißt, ich müßte dann im entsprechenden C-File, hier also 
PIDControl.c main.h inkludieren... Den Verdacht hab ich auch - hab dann 
aber das Prob das viele Deklarationen doppelt vorkommen... hmmm... 
trotzdem mal probieren.
#2735410
Lesenswert?

Joachim ... schrieb:
>>Vielleicht einfach mal ALLES in ein File kopieren(/posten).
> Das ist genau das was ich nicht möchte.
>
>>Mit 'extern int8_t selectPID1;' sagst du zwar, das die Variable irgendwo >anders
> erklärt wird, aber irgendwo musst du main.h schon inkludieren.
> Hm. Das heißt, ich müßte dann im entsprechenden C-File, hier also
> PIDControl.c main.h inkludieren...

Nein!

Aber es muss ein C-File geben, in dem zb deine main() ist.
Und in die müsstest du main.h inkluden.


Aber eigentlich ist auch das der falsche Weg. Denn wenn ich mich an der 
Namensgebung orientiere, dann gehört ja eine Variable "selectPID1 " 
logisch gesehen zur PIDControl. Also muss sie dort auch rein

Datei PIDControl.h:
1
void selectPID(void);
2
extern int8_t selectPID1;

Datei PIDControl.c:
1
#include "PIDControl.h"
2

3
int8_t selectPID1 = 0;
4

5
void selectPID(void) {
6
  switch(selectPID1) 
7
  {
8
  ...
9
  ...
10
  }

Lass Variablen nach Möglichkeit immer bei dem Modul, zu dem sie gehören!
Es gibt keine Verpflichtung, dass die Definitionen externer Variablen an 
einer Stelle zusammengefasst werden müssen. Dafür hast du ja einen 
Linker.
#2735417
Lesenswert?

Allerdings ist das hier

> Stattdessen kommt:
> Error  6  'selectPID1' undeclared (first use in this function)
> Error  5  expected '=', ',', ';', 'asm' or '__attribute__' before
> 'selectPID1'

ein ganz anderer Fehler.

Der COmpiler beschwert sich nicht darüber, dass er selectPID1 nicht 
kennen würde, sondern darüber, dass er mit int8_t nix anfangen kann.

Dir fehlt ein include auf <stdint.h>


(Die entscheidende Fehlermeldung ist der Error 5:
 BEFORE selectPID1

Error 6 ist nur noch Folgefehler davon.
OP #2735578
Lesenswert?

Volltreffer!
Vielen Dank. Das eigenartige war nämlich, daß es mit:
typedef unsigned char Byte;
und entsprechend
Byte SelectPID... keine Probleme gab. Auch scheint es mir ein großer 
Trugschluß, daß int8_t und signed char 100% gleich sind... aber das nur 
am Rande.

Gruß von der Costa Brava; Hast ein cerveza gratuita bei mir gut.

J.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren