warning: array subscript has typ 'char'
-
Guten Abend und nen schönen Sonntag,
bin dabei mir eine kleine oberfläche zu schreiben, es klappt zwar auch soweit aber
beim compilieren kommt die warnung array subscript has typ 'char'. aber es funktioniert. Kann mir jemand sagen warum ?whaupt = newwin (20, 79, 2, 0);//*** 20 Zeilen, 79 Spalten, y, x ***
box(whaupt, ACS_VLINE, ACS_HLINE);//*** Zeichnet Box um Win ***
phaupt = new_panel(whaupt);
wbkgd(whaupt, COLOR_PAIR(3));//*** Fensterfarben (3) ***
mvwaddstr(whaupt, 1, 5, "1 = Jalousiesteuerung");
mvwaddstr(whaupt, 2, 5, "2 = Heizungssteuerung");
mvwaddstr(whaupt, 3, 5, "3 = Lichtsteuerung");
mvwaddstr(whaupt, 4, 5, "4 = Steckdosensteuerung");
mvwaddstr(whaupt, 5, 5, "5 = Gartenbewaesserung");
mvwaddstr(whaupt, 6, 5, "6 = Aussenbeleuchtung");
wrefresh(whaupt);Eine weitere frage wäre, mit getch uns timeout(0) kann man ja die tastertur abfragen ohne zu warten, geht das mit case auch ?
mfg Michael
-
hi,
bitte benutze doch die code-tags - ansonsten ist es echt eine qual den code zu lesen. danke
mfg blan
-
Nagut, dachte bei dem kleinen schnippsel brauch das nicht sein aber werde mich besser
whaupt = newwin (20, 79, 2, 0);//*** 20 Zeilen, 79 Spalten, y, x *** box(whaupt, ACS_VLINE, ACS_HLINE);//*** Zeichnet Box um Win *** phaupt = new_panel(whaupt); wbkgd(whaupt, COLOR_PAIR(3));//*** Fensterfarben (3) *** mvwaddstr(whaupt, 1, 5, "1 = Jalousiesteuerung"); mvwaddstr(whaupt, 2, 5, "2 = Heizungssteuerung"); mvwaddstr(whaupt, 3, 5, "3 = Lichtsteuerung"); mvwaddstr(whaupt, 4, 5, "4 = Steckdosensteuerung"); mvwaddstr(whaupt, 5, 5, "5 = Gartenbewaesserung"); mvwaddstr(whaupt, 6, 5, "6 = Aussenbeleuchtung"); wrefresh(whaupt);
-
kannst du mal den gesamten fehler posten - also inkl. zeilennummer usw.. ?
mfg blan
-
Hier nun der Komplette Code und die meldung :
main.cc: In function 'void Hauotmenu()':
main.cc:86: warning: array subscript has type 'char'
main.cc:86: warning: array subscript has type 'char'
main.cc: In function 'void Jaloumenu()';
main.cc:102: warning: array subscript has type 'char'
main.cc:102: warning: array subscript has type 'char'die If-anweisungen will ich im main noch durch eine Switch/case umtauschen, soll
doch besser sein oder habe ich das falsch ?/* * testprogramm */ #include <iostream> #include <ctime> #include <panel.h> #include <curses.h> #include <stdlib.h> #include <bwctmb/bwctmb.h> using namespace std; int main (int argc, char *argv[]); //***** Speicherfreigabe der Panel/Fenster ***** WINDOW *whaupt, *wjalou, *wheiz, *wlicht, *wsteck, *wwasser, *waussenlicht, *whinter, *wzeit; PANEL *phaupt, *pjalou, *pheiz, *plicht, *psteck, *pwasser, *paussenlicht, *phinter, *pzeit; //***** Schützen die Daten die von mehreren Threads genurt werden können ***** static Mutex zeittausch; //***** unsere Daten ***** //static double steuerzeit; //***** Bus IP des Jalousiesteuerungsmoduls ***** Modbus mbja("192.168.0.150", "502"); //***** Uhrzeit ***** class Uhrzeit : public Thread { virtual void *threadstart(); virtual void threadend(); void zeitabfrage(); }; void * Uhrzeit::threadstart() { log("Uhrzeit thread started"); zeitabfrage(); return NULL; } void Uhrzeit::threadend() { // delete this; } void Uhrzeit::zeitabfrage() { wzeit = newwin (1, 36, 23, 44); pzeit = new_panel(wzeit); wbkgd(wzeit, COLOR_PAIR(1)); wattrset(wzeit, A_BOLD); for (;;) { time_t zeit = time(NULL); tm *p_zeit = localtime(&zeit); char lzeit[40]; strftime (lzeit, sizeof(lzeit), "Es ist der %d %b %Y und %H:%M:%S", p_zeit); mvwaddstr(wzeit, 0, 0, lzeit); wrefresh(wzeit); usleep(1000000); } } //***** Hintergrund ***** void Hintergrund() { whinter = newwin (24, 79, 0, 0); phinter = new_panel(whinter); wbkgd(whinter, COLOR_PAIR(1)); wattrset (whinter, A_BOLD); mvwaddstr (whinter, 0, 24, "Steuerungsmenu / Homecontrol "); mvwaddstr (whinter, 23, 0, "ESC um Programm zu beenden"); wrefresh(whinter); } //***** Hauptmenu ***** void Hauptmenu() { whaupt = newwin (20, 79, 2, 0);//*** 20 Zeilen, 79 Spalten, y, x *** box(whaupt, ACS_VLINE, ACS_HLINE);//*** Zeichnet Box um Win *** phaupt = new_panel(whaupt); wbkgd(whaupt, COLOR_PAIR(3));//*** Fensterfarben (3) *** mvwaddstr(whaupt, 1, 5, "1 = Jalousiesteuerung"); mvwaddstr(whaupt, 2, 5, "2 = Heizungssteuerung"); mvwaddstr(whaupt, 3, 5, "3 = Lichtsteuerung"); mvwaddstr(whaupt, 4, 5, "4 = Steckdosensteuerung"); mvwaddstr(whaupt, 5, 5, "5 = Gartenbewaesserung"); mvwaddstr(whaupt, 6, 5, "6 = Aussenbeleuchtung"); wrefresh(whaupt); } //***** Jalousiemenu ***** void Jaloumenu() { wjalou = newwin (13, 30, 3, 40); box(wjalou, ACS_VLINE, ACS_HLINE); pjalou = new_panel(wjalou); wbkgd(wjalou, COLOR_PAIR(2)); mvwaddstr(wjalou, 1, 2, "1 = Jalousie Kueche"); mvwaddstr(wjalou, 2, 2, "2 = Jalousie Wohnzimmer"); mvwaddstr(wjalou, 3, 2, "3 = Jalousie Garage"); mvwaddstr(wjalou, 4, 2, "4 = Jalousie Flur oben"); mvwaddstr(wjalou, 5, 2, "5 = Jalousie Schlafzimmer"); mvwaddstr(wjalou, 6, 2, "6 = Jalousie Buero"); mvwaddstr(wjalou, 7, 2, "7 = Jalousie Bad"); mvwaddstr(wjalou, 8, 2, "8 = Jalousie allgemein auf"); mvwaddstr(wjalou, 9, 2, "9 = Jalousie allgemein ab"); mvwaddstr(wjalou, 11, 2, "Enter = Fenster schliessen"); top_panel(phaupt); update_panels(); doupdate(); wrefresh(wjalou); } class Platinenabfrage : public Thread { SArray<bool> inputsja; SArray<bool> outputsja; SArray<bool> outputsja_tmp; virtual void *threadstart(); virtual void threadend(); void pabfrage(); }; void * Platinenabfrage::threadstart() { log("Abfrage thread started"); pabfrage(); return NULL; } void Platinenabfrage::threadend() { delete this; } void Platinenabfrage::pabfrage() { for(;;) { try { //*** Uhrzeitabfrage intern *** tm *ptm; time_t *cur_time; cur_time = new time_t; ptm = new tm; time(cur_time); ptm = localtime(cur_time); usleep(200000); inputsja = mbja.read_discrete_inputs(255, 0, 16); outputsja_tmp = outputsja = mbja.read_coils(255, 0, 16); //************** testanfang ****************** // Schaltet Jalousie mit Taster 12 und Ausgang 11/12 // für 30sec static bool inputsstandb; static bool outputsstandb; static int zeitwertb; if (ptm->tm_sec == (zeitwertb + 30)) { outputsja[11] = 0; outputsja[12] = 0; } if ((inputsja[12] > 0 ) & !inputsstandb ) { if ((outputsja[11] < 1 ) & (outputsja[12] < 1 )) { if ((outputsstandb <1) & (outputsja[11] <1)) { if (ptm->tm_sec <30) { zeitwertb = ptm->tm_sec;} else { zeitwertb = ptm->tm_sec - 60;} outputsja[11] = 0; outputsja[12] = 1; outputsstandb = 1; } if ((outputsstandb >0 ) & (outputsja[12] <1 )) { if (ptm->tm_sec <30) { zeitwertb = ptm->tm_sec;} else { zeitwertb = ptm->tm_sec - 60;} outputsja[12] = 0; outputsja[11] = 1; outputsstandb = 0; } } else {outputsja[11] = 0; outputsja[12] = 0;} } inputsstandb = inputsja[12]; //**************** Test ende ************** //*** Kontrollschaltung 15 *** outputsja[15] = inputsja[15]; for (uint16_t i = 0; i < 16; i++) { if (outputsja[i] != outputsja_tmp[i]) { mbja.write_coil(255, i, outputsja[i]); } } } catch (std::exception& e) { // exception thrown is logged anyway sleep(3); } } } void ende() { del_panel(phinter); del_panel(phaupt); del_panel(pjalou); delwin(whinter); delwin(whaupt); delwin(wjalou); endwin(); cout <<"Programm beendet durch Benutzer\n"; } int main (int argc, char *argv[]) { initscr(); timeout(0); atexit(ende); clear(); noecho(); curs_set(0); cbreak(); start_color(); init_pair(1, COLOR_BLUE, COLOR_BLACK); init_pair(2, COLOR_GREEN, COLOR_BLACK); init_pair(3, COLOR_YELLOW, COLOR_BLACK); //*** Bildschirm bauen *** Hintergrund(); Hauptmenu(); Jaloumenu(); //*** Thread Objekte erstellen *** Uhrzeit Uhrzeit_Thread; Platinenabfrage Platinenabfrage_Thread; //*** Thread starten *** Uhrzeit_Thread.start(); Platinenabfrage_Thread.start(); int au=10, ha=0, ja=0; for (;;) { usleep(500000); au = getch(); if (ha == 0) //***** Hauptauswahlmenu ***** { if (au == 27) break; //***ESC druck*** if (au == 49) {top_panel(pjalou);ha=1;ja=1;} } if (ja =! 0) //***** Jalousieauswahl ***** { if (au == '\n') {top_panel(phaupt);ha=0;ja=0;} } update_panels(); doupdate(); } // endwin(); // cout <<"\nProgramm beendet durch Benutzer\n"; return 0; }
Also jedesmal wo box das panel umrandet in der zeile meldet er die warnung
-
du verwendest eine variable vom typ char als index in ein array. entweder du verwendest einen int oder du castest explizit mit static_cast<int>(var) bevor du die variable so verwendest.
-
guten abend namenlos
oh (fragezeichen vors gesicht) nun ich hatte mir ein beispielcode unter wikki von ncurses gesucht wo das ebend so angegeben ist.
nu schau ich doch etwas fraglos aus
mfg Michael
-
Nun habe jetzt was im netz gefunden da soll man mit
box(fenster, 0, 0) auch eine Linie umherziehen.
Geht auch und die warung ist nun weg.
Gebe aber zu das ich nicht ganz verstehe warum er nun mit 0, 0 auch die linie zieht