Forum: PC-Programmierung Ärger mit typedef und enum


von Chris J. (Gast)


Lesenswert?

Hallo,

weiss einer, warum hier die Fehlermeldung

variable or field "SetLED"declared void

kommt?
1
 enum farbe {gruen,rot,gelb};
2
 typedef enum farbe farbe_t;
3
 
4
void SetLED(farbe_t led) {
5
  
6
  led = gruen;
7
  return;
8
}

von Jörg (Gast)


Lesenswert?

Chris J. schrieb:
> typedef enum farbe farbe_t;

Muss hier farbe und farbe_t getauscht werden?

Ansonten geht folgendes:
1
typedef enum {
2
 gruen,
3
 rot,
4
 gelb,
5
} farbe_t;
6
7
farbe_t farbe;

Aber irgendwie ist deine Funktion auch merkwürdig.
led ist dein Parameter mit dem Farbwert, den du in die Funktion 
übergibst.
Dann überschreibst du aber led mit einer Farbe.
Das ergibt keinen Sinn.

von Thomas M. (thomil)


Lesenswert?

Du musst uns hier den ganzen Code zeigen. Beim gezeigten Code tritt der 
genannte Fehler nämlich nicht auf. Zusätzlich ist der gezeigte Code 
sinnfrei, da er nichts tut.

von HyperMario (Gast)


Lesenswert?

Chris J. schrieb:
> variable or field "SetLED"declared void

Wie wäre es mit:
1
 int SetLED(farbe_t led) ...

von Chris J. (Gast)


Lesenswert?

Thomas M. schrieb:
> Du musst uns hier den ganzen Code zeigen. Beim gezeigten Code tritt der
> genannte Fehler nämlich nicht auf. Zusätzlich ist der gezeigte Code
> sinnfrei, da er nichts tut.

Es geht nur um diesen vereinfachten Code, wo alles gelöscht wurde, was 
stört.
Er lässt sich mit der Arduino IDE nicht kompilieren.

von Chris J. (Gast)


Lesenswert?

HyperMario schrieb:
> Wie wäre es mit:
>  int SetLED(farbe_t led) ...

farbe_t was not declared in this scope.

Hatz aber wohl mit der Arduino IDE was zu tun. Setze ich enum in ein 
Header File rein lässt es sich kompilieren.

von Thomas M. (thomil)


Lesenswert?

Chris J. schrieb:
> Es geht nur um diesen vereinfachten Code, wo alles gelöscht wurde, was
> stört.
> Er lässt sich mit der Arduino IDE nicht kompilieren.

Ich habe hier gerade keine Arduino IDE zur Hand, aber mit gcc compiliert 
der Code mit 0 Fehler und 1 (berechtigter) Warnung.

Sicher, dass es hier nicht noch zusätzlichen Code gibt, der SetLED() zum 
Beispiel aufruft?

Bitte zusätzlich die ungekürzte Fehlermeldung posten(inklusibe 
Zeilennummern, etc).

von Thomas M. (thomil)


Lesenswert?

Chris J. schrieb:
> HyperMario schrieb:
>> Wie wäre es mit:
>>  int SetLED(farbe_t led) ...
>
> farbe_t was not declared in this scope.
>
> Hatz aber wohl mit der Arduino IDE was zu tun. Setze ich enum in ein
> Header File rein lässt es sich kompilieren.

Wenn das das Problem ist, dann tritt das Problem auf, weil du das 
typedef hinter der SetLED() Funktion definiert hast. Das musst du davor 
definieren, damit der compiler das beim parsen der SetLED Funktion 
kennt.

Dann ist aber der gepostete Code aber entgegen deiner Aussage nicht 
genau der Code der bei dir nicht funktioniert hat. Und genau deswegen 
wollte ich den vollständigen Code haben...

von Chris J. (Gast)


Lesenswert?

Arduino: 1.8.5 (Windows 7), Board: "Arduino Pro or Pro Mini, ATmega328P 
(3.3V, 8 MHz)"

E:\Arduino\arduino-builder -dump-prefs -logger=machine -hardware 
E:\Arduino\hardware -hardware 
C:\Users\Administrator\AppData\Local\Arduino15\packages -tools 
E:\Arduino\tools-builder -tools E:\Arduino\hardware\tools\avr -tools 
C:\Users\Administrator\AppData\Local\Arduino15\packages 
-built-in-libraries E:\Arduino\libraries -libraries K:\Arduino\libraries 
-fqbn=arduino:avr:pro:cpu=8MHzatmega328 -ide-version=10805 -build-path 
C:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_236022 -warnings=all 
-build-cache C:\Users\ADMINI~1\AppData\Local\Temp\arduino_cache_665032 
-prefs=build.warn_data_percentage=75 
-prefs=runtime.tools.arduinoOTA.path=E:\Arduino\hardware\tools\avr 
-prefs=runtime.tools.avr-gcc.path=E:\Arduino\hardware\tools\avr 
-prefs=runtime.tools.avrdude.path=E:\Arduino\hardware\tools\avr -verbose 
K:\Arduino\Software\radar_gsm\radar_gsm.ino
E:\Arduino\arduino-builder -compile -logger=machine -hardware 
E:\Arduino\hardware -hardware 
C:\Users\Administrator\AppData\Local\Arduino15\packages -tools 
E:\Arduino\tools-builder -tools E:\Arduino\hardware\tools\avr -tools 
C:\Users\Administrator\AppData\Local\Arduino15\packages 
-built-in-libraries E:\Arduino\libraries -libraries K:\Arduino\libraries 
-fqbn=arduino:avr:pro:cpu=8MHzatmega328 -ide-version=10805 -build-path 
C:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_236022 -warnings=all 
-build-cache C:\Users\ADMINI~1\AppData\Local\Temp\arduino_cache_665032 
-prefs=build.warn_data_percentage=75 
-prefs=runtime.tools.arduinoOTA.path=E:\Arduino\hardware\tools\avr 
-prefs=runtime.tools.avr-gcc.path=E:\Arduino\hardware\tools\avr 
-prefs=runtime.tools.avrdude.path=E:\Arduino\hardware\tools\avr -verbose 
K:\Arduino\Software\radar_gsm\radar_gsm.ino
Using board 'pro' from platform in folder: 
E:\Arduino\hardware\arduino\avr
Using core 'arduino' from platform in folder: 
E:\Arduino\hardware\arduino\avr
Detecting libraries used...
"E:\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 
-fpermissive -fno-exceptions -ffunction-sections -fdata-sections 
-fno-threadsafe-statics  -flto -w -x c++ -E -CC -mmcu=atmega328p 
-DF_CPU=8000000L -DARDUINO=10805 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR 
"-IE:\Arduino\hardware\arduino\avr\cores\arduino" 
"-IE:\Arduino\hardware\arduino\avr\variants\eightanaloginputs" 
"C:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_236022\sketch\radar_ 
gsm.ino.cpp"  -o "nul"
"E:\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 
-fpermissive -fno-exceptions -ffunction-sections -fdata-sections 
-fno-threadsafe-statics  -flto -w -x c++ -E -CC -mmcu=atmega328p 
-DF_CPU=8000000L -DARDUINO=10805 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR 
"-IE:\Arduino\hardware\arduino\avr\cores\arduino" 
"-IE:\Arduino\hardware\arduino\avr\variants\eightanaloginputs" 
"-IE:\Arduino\hardware\arduino\avr\libraries\SoftwareSerial\src" 
"C:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_236022\sketch\radar_ 
gsm.ino.cpp"  -o "nul"
Using cached library dependencies for file: 
E:\Arduino\hardware\arduino\avr\libraries\SoftwareSerial\src\SoftwareSer 
ial.cpp
Generating function prototypes...
"E:\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 
-fpermissive -fno-exceptions -ffunction-sections -fdata-sections 
-fno-threadsafe-statics  -flto -w -x c++ -E -CC -mmcu=atmega328p 
-DF_CPU=8000000L -DARDUINO=10805 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR 
"-IE:\Arduino\hardware\arduino\avr\cores\arduino" 
"-IE:\Arduino\hardware\arduino\avr\variants\eightanaloginputs" 
"-IE:\Arduino\hardware\arduino\avr\libraries\SoftwareSerial\src" 
"C:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_236022\sketch\radar_ 
gsm.ino.cpp"  -o 
"C:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_236022\preproc\ctags 
_target_for_gcc_minus_e.cpp"
"E:\Arduino\tools-builder\ctags\5.8-arduino11/ctags" -u 
--language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns 
--line-directives 
"C:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_236022\preproc\ctags 
_target_for_gcc_minus_e.cpp"
Sketch wird kompiliert...
"E:\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -Wall -Wextra 
-std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections 
-fdata-sections -fno-threadsafe-statics -MMD -flto -mmcu=atmega328p 
-DF_CPU=8000000L -DARDUINO=10805 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR 
"-IE:\Arduino\hardware\arduino\avr\cores\arduino" 
"-IE:\Arduino\hardware\arduino\avr\variants\eightanaloginputs" 
"-IE:\Arduino\hardware\arduino\avr\libraries\SoftwareSerial\src" 
"C:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_236022\sketch\radar_ 
gsm.ino.cpp"  -o 
"C:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_236022\sketch\radar_ 
gsm.ino.cpp.o"
In file included from K:\Arduino\Software\radar_gsm\radar_gsm.ino:1:0:

globvars.h:59: error: variable or field 'Set_LED' declared void

 void Set_LED(farbe_t, bool);

              ^

globvars.h:59: error: 'farbe_t' was not declared in this scope

In file included from 
E:\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:24:0,

                 from 
C:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_236022\sketch\radar_g 
sm.ino.cpp:1:


Bibliothek SoftwareSerial in Version 1.0 im Ordner: 
E:\Arduino\hardware\arduino\avr\libraries\SoftwareSerial  wird verwendet
exit status 1
variable or field 'Set_LED' declared void

von Chris J. (Gast)


Lesenswert?

Ich habe es jetzt im globalen Header aber es gibt schon wieder Probleme, 
teste grad jede erdenkliche Möglichkeit durch......

Das wir schon angemeckert, egal wo es steht:

enum farbe {gruen,rot,gelb};
typedef farbe farbe_t;

Beitrag #5647366 wurde von einem Moderator gelöscht.
von Chris J. (Gast)


Lesenswert?

Das Thema gabs aber schon mal vor 5 Jahren.... häng tdamit zusammen wie 
die Ard.IDE ein projekt intern in Happen zerlegt, so dass zb keine 
Prototypen verwendet werden müssen:

Beitrag "Typedef enum als Funktionsparameter (Arduino)"

Zitat: "Durch die "Magic Tricks" der Arduino-IDE funktioniert es nur, 
wenn Du
Deine enum-Deklarationen in einer eigenen Headerdatei machst und diese
per #include in Deinen Sketch einbindest."

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Chris J. schrieb:
> void SetLED(farbe_t led) {

SetLED hat hier 1 Argument.

Chris J. schrieb:
> globvars.h:59: error: variable or field 'Set_LED' declared void
>
>  void Set_LED(farbe_t, bool);

SetLED hat hier 2 Argumente. Vermutlich entsteht die obige Fehlermeldung 
von  Zeile 59 aber, weil etwas in Zeile 58 oder darüber kaputt ist.

Oder Du hast noch irgendwo eine Funktion Set_LED() mit einem Argument 
definiert, welche aber nicht "void" als Rückgabetyp hat.

Du hast vergessen, diese Deklaration mit den 2 Argumenten überhaupt zu 
zeigen. Was soll das werden? Heiteres Rätselraten?

> globvars.h:59: error: 'farbe_t' was not declared in this scope

farbe_t hast Du erst im C-Source deklariert, stimmts? Dann steigt der 
Compiler bereits beim Include von globvars.h aus, weil dort bereits 
farbe_t verwendet wird.

Chris J. schrieb:
> Ich habe es jetzt im globalen Header aber es gibt schon wieder Probleme,
> teste grad jede erdenkliche Möglichkeit durch......

Wo kann ich die Möglichkeiten nachlesen? Du probierst blind einfach 
alles "erdenkliche"? Oh, weia, keine Ahnung, was da bei Dir alles 
"erdenklich" sein kann. Das kann ja nichts werden. Das ist Chaos pur!

> Das wir schon angemeckert, egal wo es steht:
>
> enum farbe {gruen,rot,gelb};
> typedef farbe farbe_t;

Egal wo steht? Du hast also keine konkrete Fehlermeldung zur Hand?

Fazit: Der ganze Source scheint ein bunt gewürfelter Mischmach zu sein. 
Definitionen und Deklarationen wurden wild miteinander vermischt und 
nicht sauber aufgestellt. Deshalb gibts Fehlermeldungen (Symptome) an 
allen Ecken und Enden, nur nicht da, wo die Fehler wirklich stecken 
(Ursache).

Chaotisches Durchtesten nützt da gar nicht, nachdenken schon eher.

Bitte zeige ein vollständiges Beispiel, was man auch selber 
compilieren kann. Sonst ist das alles Rätselraten.

: Bearbeitet durch Moderator
von Chris J. (Gast)


Angehängte Dateien:

Lesenswert?

Frank M. schrieb:
> Wo kann ich die Möglichkeiten nachlesen? Du probierst blind einfach
> alles "erdenkliche"? Oh, weia, keine Ahnung, was da bei Dir alles
> "erdenklich" sein kann. Das kann ja nichts werden. Das ist Chaos pur!

Frank,

wer mit der ArdIDE arbeitet kann sich leider keine schönen Konstrukte 
bauen, wie wir sie kennen! Ich habe das grad im EmbItz für den Cortex 
mal genauso eingehackt und da wird es fehlerfrei genommen. Der Source 
Code ist recht gross und in mehrere Teile aufgeteilt ohne dass ich 
header benutze, bzw nur einen einzigen und schon gar keine Prototypen, 
lokalen Variablen, extern usw.

Das Projekt was ich grad mache ist nicht-öffentlich, da gewerblich. 
Ausnahmsweise mal kein Hobbyprojekt. Daher kann ich den ganzen Code, der 
aus 8 Modulen besteht hier nicht posten. Da ich von AVR keine Ahnung 
habe, weil ich aus der Cortex Welt komme nutze ich die ArduIDE, AVR war 
Vorgabe, PIC wäre mir auch lieber gewesen, da hätte ich den CCS 
verwenden können.

Habs grad alles nochmal probiert, die IDE erlaubt keine enums in Source 
Modulen. Habe sie daher durch #define ersetzt, das geht auch.

PS: falsche Datei angehängt, kann ich nicht mehr ändern.

von Kaj (Gast)


Lesenswert?

Chris J. schrieb:
> Der Source
> Code ist recht gross und in mehrere Teile aufgeteilt ohne dass ich
> header benutze, bzw nur einen einzigen und schon gar keine Prototypen,
> lokalen Variablen, extern usw.
Was ist das denn fuer ein Unfug? Glaubst du das Prototypen und Header 
boese sind, oder warum meinst du dich weigern zu muessen diese zu 
verwenden? Sind lokale Variablen auch boese?
Sieht nicht so aus, als ob du wuesstest was du da machst.

Wenn man so Software"entwickelt", wie du es beschreibst, dann sind 
Probleme vorprogrammiert.

von Chris J. (Gast)


Lesenswert?

Kaj schrieb:
> Was ist das denn fuer ein Unfug? Glaubst du das Prototypen und Header
> boese sind, oder warum meinst du dich weigern zu muessen diese zu
> verwenden? Sind lokale Variablen auch boese?

Ich beende diesen Thread hier jetzt, da ich mir diese Trolle hier nicht 
weiter antun will, vor allem wenn sie keine Ahnung haben wie hier.. In 
jedem anderen Forum  kann man nur schreiben wenn man registriert ist, 
nur hier kann jeder Depp seinen Unfug ablassen.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Chris J. schrieb:
> Daher kann ich den ganzen Code, der aus 8 Modulen besteht hier nicht
> posten.

Aber Du könntest ein 3-zeiliges globvars.h und ein 5-zeiliges led.cpp 
posten, damit jeder hilfsbereite Leser exakt den Fehler reproduzieren 
kann. Dann wird Dir bestimmt auch geholfen. Es könnte sogar sein, dass 
Du beim Eindampfen des Codes auf ein reproduzierbares Beispiel selbst 
die Ursache des Problems erkennst.

Ich kann leider nach dem aktuellen Stand nicht nachvollziehen, wo das 
Problem ist.

Mit dem von Dir angehängten nrf24l01_usr.c kann ich nichts anfangen, da 
ist weder set_LED() noch farbe_t noch das enum drin.

: Bearbeitet durch Moderator
von Chris J. (Gast)


Lesenswert?

Frank M. schrieb:
> Aber Du könntest ein 3-zeiliges globvars.h und ein 5-zeiliges led.cpp
> posten, damit jeder hilfsbereite Leser exakt den Fehler reproduzieren
> kann.

Ich habe dazu eine PN geschrieben. Das Problem liegt wie bereits erwähnt 
in der IDE verborgen. Weder in der Coocox, noch in der Embitz IDE taucht 
es auf, wenn ich genau diese Zeilen wie oben verwende. Arduino hat einen 
Preprozessor der den Code neu strukturiert, so dass der Nutzer nicht 
damit "belastet" wird. Und dieser Präprozessor verweigert enmus und 
typedefs in Sourcen, sorry .ino's Und man kann auch kein "extern" 
verwenden, da jede globale Variable wo sie auch auftaucht allen anderen 
ino's bekannt ist, automatisch. Entwder man hält sich an diese 
"Benutzer-Freundlichkeiten" oder man nimmt besser AVR Studio. Den 
gleichen Zirkus habe ich mit Prototypen gehabt, inzwischen alle gelöscht 
und siehe da, es läuft durch.

Gruss,
Christian

von A. S. (Gast)


Lesenswert?

Chris J. schrieb:
> enum farbe {gruen,rot,gelb};
> typedef farbe farbe_t;

Das hat aber nichts, rein Garnichts mit dem hier zu tun:

Chris J. schrieb:
> enum farbe {gruen,rot,gelb};
>  typedef enum farbe farbe_t;

Darum immer
 - Den Code verkleinern, bis der Fehler nicht mehr auftritt
 - Dann schauen, was man zuletzt geändert hat
 - Im Zweifel den vorletzten Code posten.

Ein falsch abgeschriebener Code kann (wie hier) schon wieder richtig 
sein!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

A. S. schrieb:
> Das hat aber nichts, rein Garnichts mit dem hier zu tun:

Äh. Da steht zweimal exakt dasselbe.

von Wer lesen kann... (Gast)


Lesenswert?

Nein

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Hmpf. Mist. Ja, stimmt.


Die erste Variante funktioniert nur in C++, da dürfte ein C-Compiler 
eine heftige Fehlermeldung auswerfen.

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.