Hilfe beim Programmieren eines Editors (undefined reference)



  • Hey @all,

    Kann mir bitte jemand helfen, da ich nichtmal ein Fenster zusammenbringe, wegen der "undefined reference", obwohl ich überall die "ncurses.h" eingebuden habe. 😞

    Hier mal die Fehlermeldung:

    rm -rf *.o
    g++ -ggdb -Wall config.cpp -c
    g++ -ggdb -Wall  window.cpp -c
    g++ -ggdb -Wall  window.o framework.cpp -c
    g++: window.o: linker input file unused because linking not done
    g++ -ggdb -Wall  config.o framework.o window.o main.cpp -o myEditor
    main.cpp: In function `int main(int, char**)':
    main.cpp:14: warning: unused variable `Framework*fw'
    framework.o(.text+0xaf): In function `Framework::init()':
    /home/freeze/myEditor/framework.cpp:21: undefined reference to `initscr'
    framework.o(.text+0xb4):/home/freeze/myEditor/framework.cpp:23: undefined reference to `has_colors'
    framework.o(.text+0xbd):/home/freeze/myEditor/framework.cpp:24: undefined reference to `start_color'
    window.o(.text+0x2c): In function `Window::Window[not-in-charge](int, int, int, int, bool)':
    /home/freeze/myEditor/window.cpp:6: undefined reference to `newwin'
    window.o(.text+0x76): In function `Window::Window[in-charge](int, int, int, int, bool)':
    /home/freeze/myEditor/window.cpp:6: undefined reference to `newwin'
    window.o(.text+0xbf): In function `Window::addBorder()':
    /home/freeze/myEditor/window.cpp:15: undefined reference to `box'
    collect2: ld returned 1 exit status
    make: *** [myEditor] Error 1
    

    Und hier die betroffenen Dateien
    main.cpp

    #include <iostream>
    #include <vector>
    #include <string>
    
    #include "window.hpp"
    #include "framework.hpp"
    #include <ncurses.h>
    
    using namespace std;
    
    int main(int argc, char* argv[]) {
      Framework* fw = new Framework();
    //  Framework* fw = new Framework(new Window());
      return 0;
    }
    

    framework.cpp:

    #include "framework.hpp"
    
    Framework::Framework() {
      init();
    }
    
    Framework::Framework(Window*& win) {
      init();
      this->window = win;
    }
    
    Framework::Framework(Window* win) {
      init();
      this->window = win;
    }
    
    Framework::~Framework() {
    }
    
    void Framework::init() {
      initscr();
    
      if(has_colors())
        start_color();
    }
    

    framework.hpp:

    #ifndef FRAMEWORK_HPP
    #define FRAMEWORK_HPP
    
    #include <ncurses.h>
    #include "window.hpp"
    
    class Framework {
      private:
        Window* window;
        void init();
    
      public:
        Framework();
        Framework(Window*&);
        Framework(Window*);
        ~Framework();
    };
    
    #endif
    

    window.cpp

    #include "window.hpp"
    
    using namespace std;
    
    Window::Window(int x, int y, int width, int height, bool border) {
      this->window = newwin(x, y, width, height);
      if(border)
        addBorder();
    }
    
    Window::~Window() {
    }
    
    void Window::addBorder() {
      box(this->window, 0, 0);
    }
    
    WINDOW* Window::get() {
      return this->window;
    }
    

    window.hpp

    #ifndef WINDOW_HPP
    #define WINDOW_HPP
    
    #include <ncurses.h>
    
    class Window {
      protected:
        WINDOW* window;
    
      public:
        Window(int x=0, int y=0, int width = 0, int height = 0, bool border = true);
        ~Window();
        void addBorder();
        WINDOW* get();
    };
    
    #endif
    

    Kann mir mit diesem Problem bitte jemand helfen?

    Vielen Dank im Voraus
    Lg _freeze_



  • in den headerdateien sind die funktionen nur deklariert. du musst die ncurses bibliothek dann noch dazulinken:

    g++ *.cc -o program -W -Wall -ansi -pedantic -lncurses
    


  • Dieser Thread wurde von Moderator/in davie aus dem Forum C++ in das Forum Linux/Unix verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten