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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.