Go Down

Topic: Mehrdimensionales Array in Library (Read 142 times) previous topic - next topic

daniel3p4u

Hallo,
ich habe mich mal an die Erstellung einer Library gewagt. Bisher hat auch alles ganz gut funktioniert. Nun würde ich gerne innerhalb der Library ein zweidimensionales Array message[][] deklarieren. Leider bekomme ich folgenden Fehler:

error: cannot convert 'byte [2][3] {aka unsigned char [2][3]}' to 'byte* {aka unsigned char*}' in assignment _message = message;

Das eindimensionale Array output funktioniert ohne Probleme.
Kann mir jemand sagen wo mein Fehler liegt?
Gruß Daniel

Auszug aus der DMON.h
Code: [Select]


class DMON
{
  public:
  DMON( Print &print );
void begin();
  private:
  Print* printer;
byte* _message;
        byte* _output;
};



Inhalt der DMON.cpp:
Code: [Select]

#include "DMON.h"

byte  message[][3] = {{0x88, 0x00, 0x00}, {0x88, 0x00, 0x00}};
byte  output[] = {20,28,21,29,22,20,23,31,19,18};

DMON_Serial::DMON( Print &print ){
_output = output;
        _message = message;
printer = &print;
}


void DMON::begin() {

}

michael_x

Ja. Hier im Konstruktor:
 
Quote
_message = message;
die zwei Variablen haben unterschiedliche Datentypen.

Nun kommt es darauf an, was du willst. Das verstehe ich nämlich nicht.
Was sollen die globalen Arrays in der .cpp Datei ?

Meinst du eventuell eine member-Variable byte (* _message)[3];
Aber was soll die bedeuten?

Doc_Arduino

Hallo,

mit Libs hab ich es nun auch nicht so, aber irgendwie kann auch dein eindimensionales array nicht funktionieren.

Der class Name DMON ist ja da.
Aber der Konstruktor fehlt und der Bereichsoperator ist falsch herum.
Und die Funktionen musste im Header nur bekannt machen, nicht nochmal hinschreiben.
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

Serenifly

#3
Dec 22, 2016, 07:10 pm Last Edit: Dec 22, 2016, 07:19 pm by Serenifly
Quote
Das eindimensionale Array output funktioniert ohne Probleme.
Selbst wenn das geht ist es trotzdem falsch


In C++11 kann man das einfach mit einer Initialisierungsliste beim Konstruktor erledigen:
http://stackoverflow.com/questions/22975215/c-multidimensional-array-initialization-in-constructor

Also Array im Header deklarieren und dann korrekt per Konstruktor initialisieren. Da Arrays aber nicht nachträglich per {} initialisiert werden können geht das nicht im Konstruktor-Körper selbst. Genau wie bei Konstanten oder Referenzen. Dafür gibt es dann das:
https://de.wikipedia.org/wiki/Initialisierungsliste
Sehr, sehr wichtig und viele Leute kennen das leider wohl nicht

daniel3p4u

Danke für die Antworten. Die Lösung mit dem einfachen Array hatte ich irgendwo im Netz gefunden und war erstmal froh, dass es funktioniert hat.
Habe es jetzt nach Sereniflys Methode gemacht. Ist für mich auch die verständlichste Methode.
Schöne Weihnachtsfeiertage, Gruß Daniel

Go Up