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
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.
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 | }
|
Variabelen werden im Konstruktor anderes initalisiert, du machst nur eine einfach zuweisung. basicChnlClass::basicChnlClass() : rawAdc( 0 ), dispatch(0), .... settingString( { 'asda', "asdf" ... } ) { }
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.