Hallo André,
mehrere Objekte der selben Art speichern -> std::vector (variable Anzahl), std::array (konstante, bekannte Anzahl).
Objekte (class/struct) als Funktionsparameter: pass-by-reference-to-const (immutable) bzw. pass-by-reference (mutable)
built-in types wie int, char, float* -> pass-by-value i. d. R.
Ja, Du kannst eine structur innerhalb einer structur definieren usw.
stellung[pStellung].farbe = pFarbe;
Dies ist sehr wohl möglich und sogar die bessere Methode. Der Compiler generiert im Hintergrund Construktoren/Destruktoren/Kopier-Konstrukturen etc., und so lange deine Klassen nicht selbst Ressourcen verwalten müssen (free-store, threads, sockets, ...) funktionieren die Compiler generierten auch einwandfrei.
Ich hab jetzt mal nur der Kürze wegen alles etwas zusammen gestaucht, aber man könnte es z.B. so machen:
#include <array> // std::array
class Sortierer {
public:
struct Koordinate { byte x,y; };
struct Grenzen { byte min,max; };
struct FarbGrenzen { Grenzen r,g,b };
struct Stellung {
Koordinate koordinate;
FarbGrenzen farbe;
};
using Stellungen = std::array<Stellung, SO_STELLUNGEN>;
explicit Sortierer(const Stellungen& padressenStellung)
: adressenStellung{ padressenStellung } { }
void setFarbGrenzen(byte pStellung, const FarbGrenzen& farbe) {
// inwiefern das EEPROM Ding funktioniert kenne ich mich nicht aus.
// evtl. EEPROM.update(adressenStellung[pStellung].farbe, farbe)
EEPROM.update(adressenStellung[pStellung].farbe.rot.minimum, farbe.rot.minimum);
EEPROM.update(adressenStellung[pStellung].farbe.rot.maximum, farbe.rot.maximum);
EEPROM.update(adressenStellung[pStellung].farbe.gruen.minimum, farbe.gruen.minimum);
EEPROM.update(adressenStellung[pStellung].farbe.gruen.maximum, farbe.gruen.maximum);
EEPROM.update(adressenStellung[pStellung].farbe.blau.minimum, farbe.blau.minimum);
EEPROM.update(adressenStellung[pStellung].farbe.blau.maximum, farbe.blau.maximum);
stellung[pStellung].farbe = farbe;
}
FarbGrenzen getFarbGrenzen(byte pStellung) { return stellung[pStellung].farbe; }
private:
Stellungen adressenStellung;
Stellungen stellung;
};
Codeformatierung ist größtenteils Geschmackssache - auf Konsistenz kommt es an. Ich möchte jedoch anmerken, dass ich persönlich den 'str' Präfix für structs ziemlich störend fand... i. A. steht "str" für mich für "string" ^^ Es wird schwieriger den eigentlichen Typ Namen zu lesen und zu erkennen, worum es sich handelt.
Ich hoffe ich konnte zmd. teilweise hilfreich sein.
LG
P.S.: class und struct sind equivalent, bis auf den Unterschied, dass bei struct standardmäßig alles public ist und bei class private