Dateiverwaltungs-Problem?

OP #2734871
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
>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
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
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
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

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.