Vom Prinzip scheints richtig zu sein.
Für das ABER, habe ich das hier gefunden. Dort gibt es dasselbe Problem mit "variable or field '......' declared void"und auch eine Lösung dafür: https://forum.arduino.cc/index.php?topic=381325.0
MfG
Vom Prinzip scheints richtig zu sein.
Für das ABER, habe ich das hier gefunden. Dort gibt es dasselbe Problem mit "variable or field '......' declared void"und auch eine Lösung dafür: https://forum.arduino.cc/index.php?topic=381325.0
MfG
verstehe ich nicht, was soll ich da jetzt wo hinzufügen?
- - - Aktualisiert - - -
aaah...
ich glaube, ich habs:
es klappt,
man muss die struct ganz oben definieren, vor allen #includes etc.
danke!!![]()
Geändert von HaWe (02.12.2018 um 17:47 Uhr)
Keine Ahnung, kenne mich doch damit selber nicht aus. Musst Du mal lesen und mit Deinen Sachen vergleichen.
ja, es klappt, danke!
Prima, freut mich!![]()
Wenn Du an irgendeiner Stelle in C eine Funktion aufrufst, muss der Compiler nicht wissen, was in der Funktion an Code steht. Er muss aber den Funktionsrumpf (Name, Parameter, Rückgabewert) für die Codeauflösung kennen. Steht die eigentliche Funktion weiter unten hinter dem Aufruf, erledigt man diese Bekanntmachung üblicherweise über eine Funktionsdeklaration (Vorwärtsreferenz):
void DoSomething(int hellIsFrozen); //The forward reference (function header with ending semicolon)
void main(){DoSomething(42);} //The call
void DoSomething(int hellIsFrozen){while(hellIsFrozen);} //The function
Typischer Halbblödenautomatismus: Um die manuelle Deklaration von Vorwärtsreferenzen zu vermeiden, legt der Arduino-Compiler ungefragt für jede Funktion eine Deklaration unterhalb der #includes an. Dass eine dieser Deklarationen einen Datentyp verwendet, der erst danach im Code deklariert wurde, scheint dabei in Kauf genommen zu werden, ebenso wie die nicht reproduzierbare Fehlermeldung, die naturgemäß nur auf eine vom Compiler erzeugte Codezeile (genau auf die automatisch generierte Vorwärtsreferenzzeile, also quasi für den User nicht nachvollziehbar) verweisen kann.
Ich will das Arduino-Konzept nicht allgemein schlecht reden. Aber DAS ist wirklich dilletantisch gemacht.
ja, genau:
es lag nicht an der Funktion, die stand an der richtigen Stelle.
auch die struct war ursprünglich schon an der richtigen Stelle.
Es lag am temp. generierten Arduino-Zwischencode.
Muss man mal bei github als issue melden.
Lesezeichen