Klasse in Main.cpp einbinden

Rene42

Erfahrenes Mitglied
Hi Leute,

dies ist meine Klasse:

Code:
// Dieser Header enthält die Brett-Klasse (Version 1.0)

using namespace std;

class Brett
      {
       public:
       int Index;
       string Name;
       int Ergebnis;
       string Uhrzeit;
       char Farbe;
       string Kommentar;
       
       Brett();
       
      };


So sieht die main.cpp aus:
Code:
#include <cstdlib>
#include <iostream>
#include <Brett.h>

using namespace std;

Brett TestBrett;

int main()
    {
          cout << "Willkommen beim HTML-Editor fuer Mannschaftsberichte \n \n";
          system("PAUSE");
          return 0;
    }

Hier bekomme ich vom Linker den Fehler "[Linker error] undefined reference to `Brett::Brett()". Weiss jemand vorran das liegt....
 
Hi.

  • es ist keine gute Idee "using namespace std;" in eine Header Datei zu schreiben. Stichwort: Namespace pollution
  • du solltest Include Guards in Headerdateien verwenden:
C++:
#ifndef BRETT_H
#define BRETT_H

// hier der Code ...

#endif // BRETT_H
  • du brauchst eine zur Brett.h gehörende Brett.cpp Datei in der du den Konstruktor der Brett Klasse implementierst.
  • Attribute einer Klasse sollten private sein, Stichwort: OOP - Information Hiding

Gruß
 
Hi,

mit der Hilfe deiner Tipps hab ich nun schon Fortschritte gemacht. Aber es bleibt ein Problem. Hab die Datei Brett.cpp angelegt. Dort hab ich den Konstruktor folgendermassen definiert:

Code:
#include <Brett.h>

Brett::Brett()
     {
      Ergebnis = 42;
     };

Die Main.cpp sieht nun so aus:
Code:
#include <cstdlib>
#include <iostream>
#include <Brett.h>

using namespace std;

Brett TestBrett;

int main()
    {
          cout << "Willkommen beim HTML-Editor fuer Mannschaftsberichte \n \n";
          TestBrett = new Brett();
          cout << TestBrett.Ergebnis;
          system("PAUSE");
          return 0;
    }


Dann bekomm ich folgende Fehlermeldung
12 C:\Dev-Cpp\HTML-Editor\main.cpp no match for 'operator=' in 'TestBrett = (((Brett*)operator new(24u)), (<anonymous>->Brett::Brett(), <anonymous>))'
 
Und wenn möglich sollte man Attribute einer Klasse in der Initialisierungsliste intitialisieren und nicht im Konstruktor-Block:
C++:
Brett::Brett() : Ergebnis(42) {
}
Und bevor du mit Zeigern arbeitest solltest du erstmal die Grundlagen üben. Lass da Zeiger mal raus.

Die Anweisung
C++:
Brett TestBrett;
erstellt schon eine Instanz der Klasse, d.h. du brauchst nicht new aufzurufen.

Gruß
 
Zurück