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
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]);
//
}
- - - Aktualisiert - - -
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();
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<<<
- - - Aktualisiert - - -
auch so geht es nicht:
Code:
void init() {
for(int i=0; i<MENULEN; i++) {
sprintf(buf,"%d line %d", i);
strcpy(list[i*CAPTLEN], buf);
}
}
wie muss man jetzt stattdessen this->init() richtig codieren?
Lesezeichen