Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

08.02.2014, 17:14

Klassenvererbung in mehreren Dateien

Hallo leute,

ich weis nicht ob meine Anfänger-frage hierher passt aber stelle sie dennoch.

Ich befasse mich gerade mit der Objektorientierung in C++ und stehe vor einem kleinen Problem.
Ich habe eine Basisklasse von der einige Klassen erben. ( Richtig ? :) )
Meine anderen Klassen sind in anderen Dateien gelagert. ( .hpp, .cpp )

Ich bekomme es irgendwie nicht hin das meine Klassen von der Basisklasse erben.

Mein Code:

Main.cpp

C-/C++-Quelltext

1
2
3
4
5
/* Wie bekomme ich es hin das ich die Klassen erstellen kann ohne einen Fehlercode wie
  class redefinition, class undefined zu bekommen.


*/



Basis.hpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
class Basis
{
protected:
   int zahl1;
   int zahl2;

public:
   void ausgabe();
}


Basis.cpp

C-/C++-Quelltext

1
2
3
4
5
6
#include "Basis.hpp"
#include <iostream>

void Basis::ausgabe() {
    std::cout << "Ausgabe..." << endl;
}


Rechnung.hpp

C-/C++-Quelltext

1
2
3
4
5
6
7
class Rechnung: public Basis {
private:
   int nummer;

public:
   void errechne();
}


Rechnung.cpp

C-/C++-Quelltext

1
2
3
4
5
6
#include "Rechnung.hpp"
#include <iostream>

void Rechnung::errechne() {
   std::cout << "rechnung..." << endl;
}


Anderes.hpp

C-/C++-Quelltext

1
2
3
4
5
6
7
class Anderes: public Basis {
private:
   char bezeichner;

public:
   void test();
}


Anderes.cpp

C-/C++-Quelltext

1
2
3
4
5
6
#include "Anderes.hpp"
#include <iostream>

void Anderes::test() {
   std::cout << "test erfolgreich" << endl;
}




Hoffe es kann mir einer helfen.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

08.02.2014, 17:16

Naja, du musst eben Basis.hpp in Rechnung.hpp und Anderes.hpp inkludieren, sonst ist die Klasse Basis dort ja nicht bekannt...

3

08.02.2014, 17:26

Das Problem ist wenn ich zwei Header Dateien einbinde welche die gleiche Header Datei einbinden ( Basis.hpp ) dann bekomme ich folgendes vom Compiler.
Visual Studio 2012

Zitat

'Basis.hpp' error C2011: 'Basis' : 'class' type redefinition
'Anderes.hpp' see declaration of 'Basis'
'Basis.hpp' Basis' : base class undefined
Hab ich da bei Klassen irgendwas verpennt? :)


Nachtrag
Problem gelöst.
Nach nun mehr als 10 Minuten Google hab ich etwas gefunden.
Was mir gefehlt hat waren anscheinend sogenannte 'Header guards'.

Werde mich mal darüber schlau machen.


Danke trotzdem @dot.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Adnan1994« (08.02.2014, 17:32)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

08.02.2014, 18:08

Exakt, Include Guards bzw. #pragma once sind, was du suchst... ;)

Evrey

Treue Seele

Beiträge: 245

Beruf: Weltherrscher

  • Private Nachricht senden

5

08.02.2014, 18:35

#pragma once wäre toller als Zeug wie MY_STUFF_HPP_INCLUDED. Zudem können zu Mindest Clang, GCC, und MSVC mit dem Pragma umgehen. Vorteile sind unter anderem reduzierte Namens-Konflikte und weniger Stress mit manchen IDEs. Vor allem Letzteres, da nicht alle IDEs gut darin sind, zu ermitteln, welcher Header jetzt welche Makros kennt und welche nicht, und somit Darstellungs-Fehler und die Auto-Vervollständigung gern mal Probleme bereiten.

C-/C++-Quelltext

1
2
3
4
int main(int _argc, char** _argv) noexcept {
  asm volatile("lock cmpxchg8b %eax");
  return 0;
} // ::main
(Dieses kleine Biest vermochte einst x86-Prozessoren lahm zu legen.)

=> Und er blogt unter Hackish.Codes D:

Werbeanzeige