Forum: Mikrocontroller und Digitale Elektronik c++ => 2dim Array in Konstruktor initialisieren


von Jasson J. (jasson)


Lesenswert?

Hallo,

ich möchte für eine Klasse ein privates 2 dimensionales Array 
definieren, was sich natürlich dann im H-File unter private 
wiederfindet. Dort kann ich es ja aber nicht initialisieren, was ich 
sinngemäß im Konstruktor machen möchte. Bei dem Vorhaben zwingt mich 
µVision allerdings dazu dem Array im Konstruktor ein "char" 
vorranzustellen, was mir sagt, dass er die Deklaration aus dem H-File 
nicht zur Kenntnis genommen hat.

Wie löse ich diese Aufgabe? - mit den eindimendimensionalen Arrays geht 
das so...

viel Grüße,
Jasson

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jasson JFK schrieb:
> Bei dem Vorhaben zwingt mich
> µVision allerdings dazu dem Array im Konstruktor ein "char"
> vorranzustellen, was mir sagt, dass er die Deklaration aus dem H-File
> nicht zur Kenntnis genommen hat.

Quelltext zeigen.

von Jasson J. (jasson)


Lesenswert?

h File Ausschnitt
1
  protected:
2
    char settingString[9][12]; <= BESAGTES ARRAY
3
    uint16_t rawAdc;
4
    signed short dispatch;
5
    signed short dirDispatch;
6
    bool dir;
7
    signed short  scaleLeft;
8
    signed short scaleRight;
9
    signed short offset;
10
    signed short result;
11
    uint8_t dirSel;
12
    uint8_t chnlSel;
13
    uint8_t rawSel;
14
    signed short internalOffset;
15
  //*****************
16
    uint8_t mixChnl;
17
    bool mixDir;
18
    uint8_t mixFak;
19
    struct einstellungen{
20
      signed short value;
21
      signed short max;
22
      signed short min;
23
    }einstllArr[9];

Konstruktor
1
basicChnlClass::basicChnlClass()
2
{
3
  rawAdc = 0;
4
  dispatch = 0;
5
  dirDispatch = 0;
6
  result = 0;
7
  
8
  char settingString[9][12] ={{"Input Dir  "},//<= hier Bezeichner nötig
9
                            {"Scale Left "},
10
                            {"Scale Right"},
11
                            {"Offset     "},
12
                            {"Mix Chnl   "},
13
                            {"Mix Scale  "},
14
                            {"Mix Dir    "},
15
                            {"Output 1   "},
16
                            {"Output 2   "},};
17
  
18
  //*****************
19
  //*****************
20
  internalOffset = 0;
21
  einstllArr[DIRIN].value = 1;       einstllArr[DIRIN].max = 1;       einstllArr[DIRIN].min = 0;
22
  einstllArr[SCLEFT].value = 100;   einstllArr[SCLEFT].max = 200;   einstllArr[SCLEFT].min = 0;
23
  einstllArr[SCRIGHT].value = 100;   einstllArr[SCRIGHT].max = 200;   einstllArr[SCRIGHT].min = 0;
24
  einstllArr[OFFSET].value = 0;     einstllArr[OFFSET].max = 100;   einstllArr[OFFSET].min = -100;
25
  einstllArr[MIXCH].value = 0;       einstllArr[MIXCH].max = 5;       einstllArr[MIXCH].min = 0;
26
  einstllArr[MIXSC].value = 0;       einstllArr[MIXSC].max = 200;     einstllArr[MIXSC].min = 0;
27
  einstllArr[DIRMIX].value = 1;     einstllArr[DIRMIX].max = 1;     einstllArr[DIRMIX].min = 0;
28
  einstllArr[OC1].value = 0;         einstllArr[OC1].max = 7;         einstllArr[OC1].min = -7;
29
  einstllArr[OC2].value = 0;         einstllArr[OC2].max = 7;         einstllArr[OC2].min = -7;
30
}

von Peter II (Gast)


Lesenswert?

Variabelen werden im Konstruktor anderes initalisiert, du machst nur 
eine einfach zuweisung.



basicChnlClass::basicChnlClass()
: rawAdc( 0 ),
  dispatch(0),
  ....
  settingString( { 'asda', "asdf" ... } )
{
}

von g457 (Gast)


Lesenswert?

> Variabelen werden im Konstruktor anderes initalisiert, du machst nur
> eine einfach zuweisung.

Wenn man jetzt noch die überzähligen Klammern weglässt wird ein Schuh 
draus :-)
1
$ cat main.cpp
2
#include <iostream>
3
4
class Foo {
5
public:
6
        Foo();
7
8
        void dumpster();
9
10
private:
11
        char m_pBar[5][3];
12
13
};
14
15
16
Foo::Foo() :
17
        m_pBar {"0", "1", "2", "3", "4"}
18
{}
19
20
21
void Foo::dumpster()
22
{
23
        std::cout << "dumpster():";
24
        for (int i = 0; i < 5; i++)
25
                std::cout << " " << m_pBar[i];
26
        std::cout << std::endl;
27
}
28
29
30
int main()
31
{
32
        Foo t;
33
        t.dumpster();
34
35
        return 0;
36
}
37
$ g++ -std=c++11 -Wall -Wextra -pedantic -o main main.cpp
38
$ ./main
39
dumpster(): 0 1 2 3 4

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.