ncurses



  • Hallo,

    ich habe eine Frage zu ncurses. Ich möchte mit drücken einer taste ein objekt auf dem bildschirm bewegen. Funktioniert eigtl auch ohne Probleme. Jedoch nur wenn ich alles direkt in die Main schreib. Wenn ich dagegen alles in ein Header schreib und die Funktion in die Main reinschreibe bekomm ich immer:

    undefined reference to initscr' undefined reference tocbreak'
    undefined reference to noecho' undefined reference tocurs_set'
    undefined reference to `stdscr'

    // ______________________________________________
    void Pong::initializeScreen()
    {
      initscr();
    
      cbreak();
      noecho();
      curs_set(false);
      nodelay(stdscr, true);
      getmaxyx(stdscr, _yMax, _xMax);
    }
    

    Weiß jemand woran das liegen könnte ?

    Grüße,
    Paul



  • Richtig gelinkt?



  • Ja, an sich müsste das stimmen.



  • Was ist "alles", "die Funktion" und "die main"?



  • Wenn es in der int main() funktioniert, denke ich ist es kein Link-Problem.

    Wie viele Dateien umfasst dein Projekt?
    Wenn das nur max. eine Handvoll sind, zeige uns mal die ersten etwa 20 Zeilen jeder Datei mit den Header-Einträgen.

    Nimm beim Quelltext statt des "Code-Button" den "C/C++ Button" 😉

    MfG f.-th.



  • Main: (funktioniert)

    #include <ncurses.h>
    #include <stdlib.h>
    #include "./Pong.h"
    
    int main(int argc, char** argv)
    {
      ...
    
    initscr();
    
      cbreak();
      noecho();
      curs_set(false);
      nodelay(stdscr, true);
      getmaxyx(stdscr, max_Y, max_X);
    
      int PosX = max_X / 2;
      int PosY = max_Y / 2;
    
      while(1)
      {
        ..objekt bewegen
      }
    }
    

    Header:

    class Pong
    {
     public:
      ....
    
      // Initialisierung für das Bewegen auf Knopfdruck
      void initializeScreen();
    
     private:
      // Größe des Feldes.
      int _xMax;
      int _yMax;
    
      ....
    };
    

    CPP:

    #include <assert.h>
    #include <ncurses.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include "./Pong.h"
    
    ....
    
    // ______________________________________________
    void Pong::initializeScreen()
    {
      initscr();
    
      cbreak();
      noecho();
      curs_set(false);
      nodelay(stdscr, true);
      getmaxyx(stdscr, _yMax, _xMax);
    }
    

    Die Main dazu: (funktioniert nicht)

    #include <ncurses.h>
    #include <stdlib.h>
    #include "./Pong.h"
    
    int main(int argc, char** argv)
    {
      ...
    
      Pong Blub(x, y);
    
      Blub.initializeScreen;
    
      int PosX = max_X / 2;
      int PosY = max_Y / 2;
    
      while(1)
      {
        ..objekt bewegen
      }
    }
    


  • Bin jetzt ein wenig verwirrt, wenn ich deinen Quelltext sehe.

    Soll das C oder C++ werden?

    So nur erst mal zum Laufen bekommen - hast du beide cpp-Dateien in dein Projekt eingebunden?

    #include "./Pong.h"
    

    Das bereitet in dieser Form auch oft Ärger. Findet dein Compiler den Header 😕 Also passen deine Ordner zum Verzeichnisbaum 😕

    MfG f.-th.



  • Ja, steht drin. Andere Funktionen der Klasse machen auch keine Probleme, nur die mit dem ncurse.

    Soll eigtl c++ werden.



  • Wie rufst du den Compiler auf?

    g++ main.cpp -lncurses pong.cpp

    könnte bei einer statischen ncurses-Bibliothek zu dem Effekt führen.



  • Paul12 schrieb:

    undefined reference to initscr' undefined reference tocbreak'
    undefined reference to noecho' undefined reference tocurs_set'
    undefined reference to `stdscr'

    Du linkst nicht gegen die ncurses-Library.
    Sag deinem Linker "-lncurses" 😉

    Cheers


Anmelden zum Antworten