newbee Klassen
-
Hi,
ich habe ein grundlegendes Problem mit Klassen.
Ich habe folgendes Beispielprogramm abgetippt:bruch.h = Headerdatei
--------------------------#ifndef BRUCH_HPP
#define BRUCH_HPPnamespace 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 functionmain': : undefined reference to
Bsp::bruch::bruch[in-charge]()'
/tmp/ccUMGqSx.o(.text+0x35): In functionmain': : undefined reference to
Bsp::bruch::bruch[in-charge](int)'
/tmp/ccUMGqSx.o(.text+0x44): In functionmain': : undefined reference to
Bsp::bruch::print()'
collect2: ld returned 1 exit status
Completed ... unsuccessful
Total time taken: 1 secsKann 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