2016-05-29 7 views
0

Ich arbeite mit Ncurses und ich versuche, eine Klasse zu erstellen, die eine Box drucken wird. Meine KlasseEiner von zwei Instanzen wird nicht initialisiert

class CMenu{ 
public: 
    CMenu(int x , int y){ 
     this -> x = x; 
     this -> y = y; 
     createMenu(); 
    } 
    void createMenu(){ 
     start_color(); 
     cbreak(); 
     noecho(); 
     keypad(stdscr, TRUE); 
     my_menu_win = newwin(30, 60, x, y); 
     keypad(my_menu_win, TRUE); 


    /* Print a border around the main window and print a title */ 
     box(my_menu_win, 0, 0); 

     mvprintw(LINES - 2, 0, "F2 to exit"); 
     refresh(); 
     wrefresh(my_menu_win); 

     while(true){ 
      switch(c = wgetch(my_menu_win)){ 
       case KEY_F(2): 
        endwin(); 
        exit(1);  
       case KEY_DOWN: 
        break; 
       case KEY_UP: 
        break; 
       case 10: 
        move(20, 0); 
        clrtoeol(); 
        wrefresh(my_menu_win); 
        refresh(); 
        break; 
      } 
      wrefresh(my_menu_win); 
     } 
    } 

private: 
    int n_choices; 
    int i; 
    int index; 
    int c; 
    int x; 
    int y; 
    WINDOW *my_menu_win; 

}; 

und Klasse, wo ich Instanz erstellen möchten der Klasse

class CUI{ 
public: 
    CUI(){ 
     min_X = 200; 
     min_Y = 50; 
    } 

    void printBackground(){ 
     start_color(); 
     init_pair(1,COLOR_GREEN,COLOR_BLACK); 
     attron(COLOR_PAIR(1)); 
     attroff(COLOR_PAIR(1)); 
     attron(COLOR_PAIR(1)); 
     mvhline((y/5) - 1, (x/6), ACS_BOARD , 140); 
     mvhline((y/5)*4, (x/6), ACS_BOARD , 140); 
    } 

    void initMenu(){  
     initscr(); 

     printBackground(); 
     left = new CMenu(10,35); 
     right = new CMenu(10,115); 

     refresh(); 
     endwin(); 
} 
private: 
    int min_X; 
    int min_Y; 
    int x; 
    int y; 

    CMenu *left; 
    CMenu *right; 
}; 

Und Haupt

int main() { 
    CUI one; 
    one.initMenu(); 
    return 0; 
} 

Das Problem, dass nur eine der Box bekommt gedruckt. Ich habe cout zu einem Konstruktor einer CMenu-Klasse hinzugefügt, um zu sehen, ob beide aufgerufen werden. Nur eine der Instanzen wird aufgerufen, die zweite Instanz wird gespeichert. Was verursacht das? Warum werden nicht beide Instanzen aufgerufen?

Antwort

1

Nachdem Sie das erste Menü erstellt haben (left = new CMenu(10,35);), wird der Konstruktor createMenu() aufgerufen ... und dieser startet eine Endlosschleife (while(true) Anweisung), die niemals enden wird.

Also das zweite Menü wird nicht erstellt. right = new CMenu(10,115); Anweisung wird nie erreicht werden ... bis CMenu::createMenu() zurückgibt ... und durch das Lesen Ihres Codes gibt es anscheinend keine Aktion, die diese Schleife beendet. So wird Ihr Programm nie mehr als eine CMenu Instanz erstellen ...

Verwandte Themen