Array in einer Class geht nicht

Hallo

Ich möcht gern einen neue Class mit einem Array anlegen! Aber leider geht es nicht !
Was mache ich falsch ?

hier die die ArrayTest.h

#ifndef ArrayTest_h
#define ArrayTest_h

#include "Arduino.h"

class BeispielClass
{
public:
	BeispielClass();

byte INPUT_ARRAY[];
 
private:

};

#endif

hier die ArrayTest.cpp

#include <Arduino.h>
#include "ArrayTest.h"

BeispielClass::BeispielClass()
{
     // Initialisierung alle drei Werte auf Null 
  
    INPUT_ARRAY  [] = { 0,0,0 };
}

Hier die ArrayTest.ino

#include "ArrayTest.h"


Beispiel ARR;





void setup()
{
  
}

void loop() {
  

}

Ohne Class würde ich das so schreiben !

//Deklaration!

byte INPUT_ARRAY [] = { 0,0,0 };

Und das geht aber leider in der Class nicht ! Warum ?

kann mir da jemand helfen ?

MFG Michael

class BeispielClass {
public:
  BeispielClass(){
    // Initialisierung alle drei Werte auf Null
     for (byte i = 0; i < sizeof (INPUT_ARRAY); i++) INPUT_ARRAY  [i] = 0;    
  };
  byte INPUT_ARRAY[3];
};

BeispielClass x; 
void setup() {}
void loop() {}

So gehts.

Oder so ( mit Initialisierungsliste ):

class BeispielClass {
{
public:
  BeispielClass():INPUT_ARRAY({0,0,0}) {}  // Initialisierung alle drei Werte auf Null

private:
  byte INPUT_ARRAY[3];
};

"Gehen" kann nach meinem Sprachverständnis nur etwas, das Beine und Füße hat.

Diese Meinung geht gar nicht, jurs. :wink:

Aber, selbst die Aussage "kompiliert nicht" ist unschön.
(Etwas besser als "funktioniert nicht", oder "geht nicht" oder so, aber nicht viel aussagekräftiger.)
Auch wenn du mit der Meldung nichts anfangen kannst, können das evtl. andere, die dir helfen sollen.

Übrigens: "Initialisierungsliste" sieht evtl. eleganter aus, erzeugt aber gleich großen Code, so dass ich vermute, der Compiler bauch dieselbe for-Schleife intern auf.

Deine Hauptprobleme sind übrigens, (meine Vermutung)

  • byte INPUT_ARRAY[]; ist kein Objekt. C++ Ist kein Java.

  • byte INPUT_ARRAY[] = {0,0,0};nimmt dir beim Übersetzen nur das Elemente zählen [3] ab,
    und ist eine Definition, statt der in der Class an dieser Stelle erforderlichen Deklaration.

BeispielClass::BeispielClass()
{
    INPUT_ARRAY  [] = { 0,0,0 };
}

Das ist ja nicht mal ein Problem mit Klassen. Auch in einer Funktion würde das nicht gehen. Arrays müssen nun mal direkt beim Erstellen initialisiert werden. Danach geht es nicht mehr mit { }.

Ansonsten ist das ähnlich wie mit Konstanten oder Referenzen. Die kann man auch nur sofort initialisieren. Oder eben mit einer Initialisierungsliste.

die ArrayTest.h sieht jetz so aus !

#ifndef ArrayTest_h
#define ArrayTest_h

#include "Arduino.h"

class BeispielClass
{
public:
 BeispielClass();
byte INPUT_ARRAY[color=red][3][/color];

private:

};

#endif

Die Arrray.cpp so !

#include <Arduino.h>
#include "ArrayTest.h"

BeispielClass::BeispielClass()
{
     // Initialisierung alle drei Werte auf Null 
[color=red] byte[/color] INPUT_ARRAY[color=red][3][/color] { 0,0,0 };
}

Und die ArrayTest.ino so !

#include "ArrayTest.h"

BeispielClass ARR;


void setup()
{
  
}

void loop() 
{

}

ist das so richtg ?

Gruß Michael

Und danke für eure Hilfe !

Na ja. Den Konstruktor kannst du dir sparen, denn

BeispielClass::BeispielClass()
{
  byte INPUT_ARRAY[3] { 0,0,0 };  // das ist was anderes als das in ArrayTest.h definierte byte INPUT_ARRAY[3]
}

und in der global definierten Variable
BeispielClass ARR; 
ist  ARR.INPUT_ARRAY  sowieso schon mit{0,0,0}initialisiert