c++ => 2dim Array in Konstruktor initialisieren

OP #3118729
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
OP #3119148
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
}
Gast #3119150
Lesenswert?

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



basicChnlClass::basicChnlClass()
: rawAdc( 0 ),
  dispatch(0),
  ....
  settingString( { 'asda', "asdf" ... } )
{
}
Gast #3119172
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren