ich möchte eine Klasse in einer .ino-Datei bekannt machen.
Leider klappt das nicht (mehr).
Es geht in der asteroid.ino um die Klassendefnition PlayerClass (Dateien Player.h und Player.cpp).
Als Fehler erhalte ich die folgende Ausgabe.
asteroid.ino: 13:39: error: invalid use of incomplete type 'class PlayerClass
Error compiling project sources
Build failed for project 'asteroid'
PlayerClass *player = new PlayerClass()
asteroid.ino: 7:7: error: forward declaration of 'class PlayerClass
class PlayerClass
asteroid.ino: In function void loop()
zLogic.ino: 45:9: error: request for member 'Update' in 'player', which is of pointer type 'PlayerClass*' (maybe you meant to use '->' ?)
player.Update(passedMillis)
Recherchen lassen darauf schließen, dass beim Einbinden von Klassen eine Art Zirkelverweis entsteht. Sollte es tatsächlich daran liegen, finde ich die entscheidende Lösung nicht.
Ich habe versucht es mit #include "Player.h" und mit class PlayerClass; versucht.
New und delete gehen schon. Das ist durch die Arduino IDE implementiert (das sind Operatoren die man überladen kann). Sollte aber nicht nötig sein. Das Objekt statisch und global anzulegen sollte reichen.
Serenifly:
In der Referenz steht ja auch nicht alles drin.
Dann ist das IMO entweder eine wirklich schlechte Referenz oder das ist absichtlich verstecktes Geheimwissen (wobei ich mich fage, wieso man das versteckt).
combie:
New und delete findest du in der C++ Referenz.
Und ja, die ist auch für Arduinos gültig.
Eingeschränkt, aber gültig.
Ja, klar, in einer „echten“ C++-Referenz stehen new und delete schon drin. Aber eben nicht in der hiesigen. Ich halte das für eine so große Einschränkung, dass ich das auch mit Einschränkungen nicht als „gültig“ bezeichnen würde.
Es lag tatsächlich nur an der Bekanntgabe von ParticleClass für PlayerClass.
Ich als diese noch fehlte und ich PlayerClass durch ein include in die .ino holte, bekam ich einen Fehler a la
error: expected class-name before '{' token
Nach Recherchen darüber kam ich zu Lösungen, die besagen, dass ich die Klasse nur über "class PlayerClass" bekannt machen könne (das von mir angesprochene Thema mit dem Zirkelverweis). Stellt sich ja nun als Quatsch heraus