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 | }
|
|
Forum: PC-Programmierung Ärger mit typedef und enumHallo, weiss einer, warum hier die Fehlermeldung variable or field "SetLED"declared void kommt?
Chris J. schrieb: > typedef enum farbe farbe_t; Muss hier farbe und farbe_t getauscht werden? Ansonten geht folgendes:
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. 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. Chris J. schrieb: > variable or field "SetLED"declared void Wie wäre es mit:
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. 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. 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). 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... 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 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.
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." 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
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. 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. 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. 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
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 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! A. S. schrieb: > Das hat aber nichts, rein Garnichts mit dem hier zu tun: Äh. Da steht zweimal exakt dasselbe. 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.
|
|