Forum: Mikrocontroller und Digitale Elektronik Multidimensionales Statisches Array in Klasse definieren


von Heinmück (Gast)


Lesenswert?

Hallo,

ich habe in einer Klasse ein statisches multidimensionales Array mit der 
Größe 10. Die Elemente dieses Arrays sind wiederum ein Array 
unbekannter Größe über ein Array mit der Größe 2.

Ganz konkret: Es sind Pixelangaben für 10 Ziffern. Die Anzahl[0] = 10, 
ein Pixel besteht aus X/Y, nur die Anzahl der Pixel soll dynamisch 
erfolgen.

Ich dachte an sowas, was aber nicht übersetzt werden kann:
1
class Test{
2
  static const uint8_t * au8Ziffer[10];
3
}
4
5
const uint8_t * Test::au8Ziffer[0][] = {{1,0},{2,0},{3,0},{0,1},{4,1},{0,2},{4,2},{0,3},{4,3},{0,4},{4,4},{0,5},{4,5},{1,6},{2,6},{3,6}};

Ich finde vermutlich einfach nur nicht die richtige Schreibweise.

Wie mache ich das richtig?

von Klassen Anfänger (Gast)


Lesenswert?

Heinmück schrieb:
> Wie mache ich das richtig?

Lese die Fehlemeldungen und interpretiere sie richtig.

von Oliver S. (oliverso)


Lesenswert?

Was ist denn jetzt wann "dynamisch"? Sollen da zur Laufzeit neue Daten 
reingeschrieben werden, oder stehen die Daten zur Compilezeit fest, und 
du hast nur keine Lust, die abzuzählen?

Oliver

von Heinmück (Gast)


Lesenswert?

Die Daten stehen zur Compilezeit alle fest.

au8Ziffer
  [0] << Ziffer "0"
  [x] << Pixxelpaar
  [0] << X-Koordinate

Die Anzahl der Pixelpaare soll halt dynmaisch geändert werden können, 
bzw. für jede Ziffer unterschiedlich sein.

Aber alles zur Compilezeit bekannt.

von Oliver S. (oliverso)


Lesenswert?

Hm. Klingt wirr, und ist wohl auch so. Was ist mit
1
[0] << Ziffer "0"
gemeint?

C/C++-Array können generell nur eine Arraydimension ohne Größenangabe 
haben und das muß die letzte sein.

Und was spricht dagegen, ein Ziffern-Objekt zu definieren, mit 
Punkt-Objekten und Koordinaten x und y, und keine unstrukturierte 
Datenwüste?

Oliver

von Heinmück (Gast)


Lesenswert?

Wie soll ich das machen, wenn bei jeder Ziffer die Anzahl von 
Koordinaten unterschiedlich ist? Ich möchte nicht mit Vectoren oder 
Templates arbeiten:

Wenn die Angabe nicht statisch ist, dann müssen die Dimensionen bekannt 
sein. Folgendes geht nicht:
1
class Ziffer{
2
  public:
3
    uint8_t koordinaten[][2];
4
};

Und für jede Ziffer eine statische Klasse erstellen finde ich nicht 
zielführend.

Bis jetzt habe ich das folgendermaßen gelöst und möchte die Ziffern in 
ein Array packen, welches statisch in der Klasse definiert sein soll:
1
const uint8_t z0[][2] = {{1,0},{2,0},{3,0},{0,1},{4,1},{0,2},{4,2},{0,3},{4,3},{0,4},{4,4}};
2
const uint8_t z1[][2] = {{2,0},{1,1},{2,1},{0,2},{2,2},{2,3},{2,4},{2,5}};
3
const uint8_t z2[][2] = {{1,0},{2,0},{3,0},{0,1},{4,1},{0,2},{4,2},{3,3},{2,4},{1,5}};
4
const uint8_t z3[][2] = {{1,0},{2,0},{3,0},{0,1},{4,1},{4,2},{3,3},{2,3},{4,4},{0,5}};
5
const uint8_t z4[][2] = {{3,0},{3,1},{3,2},{3,3},{3,4},{3,5},{3,6},{0,4},{1,4},{2,4}};
6
const uint8_t z5[][2] = {{0,0},{1,0},{2,0},{3,0},{4,0},{0,1},{0,2},{1,2},{2,2},{3,2},{4,3},{0,4}};
7
const uint8_t z6[][2] = {{1,0},{2,0},{3,0},{0,1},{4,1},{0,2},{0,3},{1,3},{2,3},{3,3},{0,4},{4,4}};
8
const uint8_t z7[][2] = {{0,0},{1,0},{2,0},{3,0},{4,0},{4,1},{3,2},{2,3},{2,4},{2,5},{2,6}};
9
const uint8_t z8[][2] = {{1,0},{2,0},{3,0},{0,1},{4,1},{0,2},{4,2},{1,3},{2,3},{3,3},{0,4},{4,4}};
10
const uint8_t z9[][2] = {{1,0},{2,0},{3,0},{0,1},{4,1},{0,2},{4,2},{1,3},{2,3},{3,3},{4,4}};

von Oliver S. (oliverso)


Lesenswert?

Geht vermutlich auch nur indirekt
1
using point_t = const uint8_t [2];
2
3
static constexpr point_t z0[] = {{1,0},{2,0},{3,0},{0,1},{4,1},{0,2},{4,2},{0,3},{4,3},{0,4},{4,4}};
4
static constexpr point_t z1[] = {{2,0},{1,1},{2,1},{0,2},{2,2},{2,3},{2,4},{2,5}};
5
static constexpr point_t z2[] = {{1,0},{2,0},{3,0},{0,1},{4,1},{0,2},{4,2},{3,3},{2,4},{1,5}};
6
static constexpr point_t z3[] = {{1,0},{2,0},{3,0},{0,1},{4,1},{4,2},{3,3},{2,3},{4,4},{0,5}};
7
static constexpr point_t z4[] = {{3,0},{3,1},{3,2},{3,3},{3,4},{3,5},{3,6},{0,4},{1,4},{2,4}};
8
static constexpr point_t z5[] = {{0,0},{1,0},{2,0},{3,0},{4,0},{0,1},{0,2},{1,2},{2,2},{3,2},{4,3},{0,4}};
9
static constexpr point_t z6[] = {{1,0},{2,0},{3,0},{0,1},{4,1},{0,2},{0,3},{1,3},{2,3},{3,3},{0,4},{4,4}};
10
static constexpr point_t z7[] = {{0,0},{1,0},{2,0},{3,0},{4,0},{4,1},{3,2},{2,3},{2,4},{2,5},{2,6}};
11
static constexpr point_t z8[] = {{1,0},{2,0},{3,0},{0,1},{4,1},{0,2},{4,2},{1,3},{2,3},{3,3},{0,4},{4,4}};
12
static constexpr point_t z9[] = {{1,0},{2,0},{3,0},{0,1},{4,1},{0,2},{4,2},{1,3},{2,3},{3,3},{4,4}};
13
14
static constexpr const point_t * au8Ziffer[] {z0, z1, z2, z3, z4, z5, z6, z7, z8, z9};

Oliver

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.