newbee Klassen



  • Hi,

    ich habe ein grundlegendes Problem mit Klassen.
    Ich habe folgendes Beispielprogramm abgetippt:

    bruch.h = Headerdatei
    --------------------------

    #ifndef BRUCH_HPP
    #define BRUCH_HPP

    namespace Bsp
    {
    class bruch
    {
    private:
    int zaehler;
    int nenner;
    public:
    bruch();
    bruch(int);

    void print();
    };

    }

    #endif

    bruch.cc = Klassendeklaration
    -------------------------------

    #include "bruch.h"

    #include <iostream>

    namespace Bsp
    {
    bruch::bruch ()
    : zaehler(0), nenner (1)
    {

    }

    bruch::bruch (int z)
    : zaehler(z), nenner (1)
    {

    }

    void bruch::print()
    {
    std::cout << zaehler << '/' << nenner << std::endl;
    }

    }

    bruchprog.cc = Hauptprogramm
    -----------------------------

    #include "bruch.h"

    int main()
    {
    Bsp::bruch x;
    Bsp::bruch w(7);
    w.print();

    }

    Alle drei Dateien habe ich im gleichen Verzeichnis.
    Wenn ich das Hauptprogramm ausführe, erhalte ich allerdings folgende Fehlermeldung:

    g++ "bruchprog.cc" -o "bruchprog"
    /tmp/ccUMGqSx.o(.text+0x24): In function main': : undefined reference toBsp::bruch::bruch[in-charge]()'
    /tmp/ccUMGqSx.o(.text+0x35): In function main': : undefined reference toBsp::bruch::bruch[in-charge](int)'
    /tmp/ccUMGqSx.o(.text+0x44): In function main': : undefined reference toBsp::bruch::print()'
    collect2: ld returned 1 exit status
    Completed ... unsuccessful
    Total time taken: 1 secs

    Kann mir jemand helfen und sagen, was ich noch falsch mache? Was ich nicht ganz verstehe ist, dass die Klassendeklarationsdatei nicht explicit augerufen oder includiert wird. Vom Hauptprogramm aus bin ich ja nur die Headerdatei ein. Andererseits scheint der Linker sie ja zu finden, denn er verweist ja auf Bsp::bruch::bruch.
    Weiß zufällig auch jemand, was das [in-charge](int) dahinter genau bedeutet?

    Ist es eigentlich üblich, dass man eine Header-Datei UND eine Klassendeklaration erstellt?

    Es sind bestimmt dumme Fragen, aber ich habe keine Ahnung, was ich falsch mache. Laut Buch sollte es so funktionieren... 😢

    Danke schon mal



  • Du linkst nicht richtig. Linken bedeutet, dass Objektdateien (Zwischencode) zusammengebunden wird. In der Regel erzeugt man aus jeder Codedatei eine Objektdatei und linkt diese dann zu der ausführbaren Datei zusammen.

    > g++ -c bruch.cc
    > g++ bruch.o bruchprog.cc -o bruchprog
    

    und bitte benutz vernünftige Topics!
    sfds



  • Vielen Dank für Deine Hilfe,

    ich probiere es mal aus.
    Und danke für den Tipp mit den Topics, habe mich schon gewundert, wie das gemacht wird. 🙂



  • ganzverzweifelt schrieb:

    Und danke für den Tipp mit den Topics, habe mich schon gewundert, wie das gemacht wird. 🙂

    lOOOl 😃
    Einfach dort, wo "Titel" steht, eine kurze Beschreibung deines Problems eingeben 😉


Anmelden zum Antworten