also dies funktioniert nicht
Code:class tMenu { protected: int16_t MENULEN, CAPTLEN; char list[MENULEN][CAPTLEN]; public: tMenu (int16_t menulen, int16_t captlen) // constructor { MENULEN = menulen; CAPTLEN = captlen; list = new char*[menulen]; for(int i = 0; i < captlen; i++) { list[i] = new char[captlen]; } } };exit status 1
invalid use of non-static data member 'tMenu::MENULEN'
so auch nicht:
Code:class tMenu { protected: int16_t MENULEN, CAPTLEN; char **list; public: tMenu (int16_t menulen, int16_t captlen) // constructor { MENULEN = menulen; CAPTLEN = captlen; list = new char*[menulen]; for(int i = 0; i < captlen; i++) { list[i] = new char[captlen]; } } }; tMenu mymenu(20,10); //... char test[15]="5 newline_"; strcpy(mymenu.list[5], test);exit status 1
'char** tMenu::list' is protected
dies funktioniert offenbar, von außen aufgerufen
- - - Aktualisiert - - -Code:class tMenu { protected: int16_t MENULEN, CAPTLEN; public: char **list; tMenu (int16_t menulen, int16_t captlen) // constructor { MENULEN = menulen; CAPTLEN = captlen; list = new char*[menulen]; for(int i = 0; i < captlen; i++) { list[i] = new char[captlen]; } } ~tMenu() // destructor { // Dynamically delete the array we allocated earlier delete[] list ; } }; tMenu mymenu(20,10); void setup(void) { // Start Serial Serial.begin(115200); delay(2000); // wait for Serial() Serial.println("Serial started"); char test[15]="5 newline_"; strcpy(mymenu.list[5], test); Serial.println(mymenu.list[5]); mymenu.list[5][0]='>'; Serial.println(mymenu.list[5]); // }
was allerdings nicht funktioniert, ist die Benutzung der array Zellen intern,
z.B. per init cstrings reinkopieren:
Code:class tMenu { protected: int16_t MENULEN, CAPTLEN; char buf[20]; public: char **list; tMenu (int16_t menulen, int16_t captlen) // constructor { MENULEN = menulen; CAPTLEN = captlen; list = new char*[MENULEN]; for(int i = 0; i < CAPTLEN; i++) { list[i] = new char[CAPTLEN]; } } void init() { for(int i=0; i<MENULEN; i++) { sprintf(buf,"%d line %d", i); strcpy(list[i], buf); } } ~tMenu() // destructor { // Dynamically delete the array we allocated earlier delete[] list ; } }; // tMenu mymenu; mymenu.init();- - - Aktualisiert - - -Exception (29):
epc1=0x40205d7b epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000
ctx: cont
sp: 3fff0250 end: 3fff0550 offset: 01a0
>>>stack>>>
3fff03f0: 00000022 3ffef4fc 00000028 402025a3
3fff0400: 3ffe9d80 4010560e feefeffe feefeffe
3fff0410: feefeffe feefeffe 00000000 4000050c
3fff0420: 3fffc278 40105464 3fffc200 00000022
3fff0430: 3fff0440 feefeffe feefeffe feefeffe
3fff0440: 402040f9 00000030 0000001e ffffffff
(usw...)
<<<stack<<<
auch so geht es nicht:
wie muss man jetzt stattdessen this->init() richtig codieren?Code:void init() { for(int i=0; i<MENULEN; i++) { sprintf(buf,"%d line %d", i); strcpy(list[i*CAPTLEN], buf); } }







Zitieren

Lesezeichen