Abgeleitete Klassen c++

mostwanted90

Grünschnabel
:confused: Hi@all

Ich habe mal wieder ein c++ Problem.

Die Aufgabenstellung:

In einem Verwaltungsprogramm für eine Firma soll es folgende Personengruppen geben.

-Person: Name,Vorname
-Mitarbeiter: Name,Vorname,Einstellungsjahr, Geburtsjahr,Gehalt,Abteilung
-Chef: Firma, Name,Vorname,Einstellungsjahr,Geburtsjahr, Gehalt, Abteilung
-Kunde: Name,Vorname, Telefonnummer

1, Erstelle für alle Personengruppen eine eigene Klasse
a) mit passenden Konstruktoren und Destruktoren
b) mit einer passenden Ausgaberotine

2, Befülle ein Zeigerarry mit unterschiedlichen Personentypen (Konstruktoren mit Parametern verwenden) und erstelle eine Ausgaberoutine zur Ausgabe der Personen


Hier mein Code für Aufgabe 1 und 2 :
Code:
#include "stdafx.h"
#include <conio.h>
#include <iostream.h>
#include <string.h>


class CPerson
{
public:
  CPerson();
  CPerson(const char* pName,const char* pVorname);

   virtual void Ausgabe();
   
protected:
  char Name[256];
  char Vorname[256];
};


CPerson::CPerson()
{ 
   
}

CPerson::CPerson(const char* pName,const char* pVorname)
{
  strcpy(Vorname, pVorname);
  strcpy(Name, pName);
}

void CPerson::Ausgabe()
{
  cout <<"Name: " <<Name <<endl <<"Vorname: " <<Vorname <<endl;
}



class CMitarbeiter : public CPerson
{
public:
  CMitarbeiter();
  CMitarbeiter(const char* pName,const char* pVorname, int pEinstellungsjahr,int pGeburtsjahr, int pGehalt,const char* pAbteilung);

  void Ausgabe();
  
protected:
  int Einstellungsjahr;
  int Geburtsjahr;
  int Gehalt;
  char Abteilung[256];
};

CMitarbeiter::CMitarbeiter()
 : CPerson(), Einstellungsjahr(2000),Geburtsjahr(00),Gehalt(0)
{
  strcpy(Abteilung,"?");
}

CMitarbeiter::CMitarbeiter(const char* pName, const char* pVorname, int pEinstellungsjahr,int pGeburtsjahr, int pGehalt,const char* pAbteilung)
  :CPerson(pName,pVorname), Einstellungsjahr(pEinstellungsjahr),Geburtsjahr(pGeburtsjahr),Gehalt(pGehalt)
{
  strcpy(Abteilung,pAbteilung);
}

void CMitarbeiter::Ausgabe()
{
  CPerson::Ausgabe();
  cout<<Abteilung <<endl;
  cout<<Einstellungsjahr <<endl;
  cout<<Geburtsjahr <<endl;
  cout<<Gehalt <<endl;
}



class CChef : public CMitarbeiter
{
public:
  CChef();
  CChef(const char* pFirma,const char* pName,const char* pVorname, int pEinstellungsjahr,int pGeburtsjahr, int pGehalt,const char* Abteilung);

  void Ausgabe();
  protected:
  char Firma[256];
  
};

CChef::CChef()
 : CMitarbeiter()
{
  strcpy(Firma,"?");
}

CChef::CChef(const char* pFirma,const char* pName, const char* pVorname, int pEinstellungsjahr,int pGeburtsjahr, int pGehalt, const char* pAbteilung)
  :CMitarbeiter(pName,pVorname,pEinstellungsjahr,pGeburtsjahr,pGehalt,pAbteilung)
{
  strcpy(Firma,pFirma);
}

void CChef::Ausgabe()
{
  
  cout<<Firma <<endl;
  CMitarbeiter::Ausgabe();
}



class CKunde : public CPerson
{
public:
  CKunde();
  CKunde(const char* pName,const char* pVorname,int pTelefonnummer);

   void Ausgabe();
  protected:
  int Telefonnummer;
};

CKunde::CKunde()
 : CPerson(), Telefonnummer(0)
{
 
}

CKunde::CKunde(const char* pName, const char* pVorname,int pTelefonnummer)
  :CPerson(pName,pVorname),Telefonnummer(pTelefonnummer)
{
}



void CKunde::Ausgabe()
{
  CPerson::Ausgabe();
  cout<<Telefonnummer <<endl;
}


int main()
{
  CPerson Person();
 
  CPerson* pPerson[25];

  pPerson[0] =new CPerson("Paul1","Franz1");
  pPerson[1] =new CPerson("Paul2","Franz2");
  pPerson[2] =new CPerson("Paul3","Franz3");

  pPerson[3] = new CMitarbeiter("Gustavadadfadfafd1","Hudadgo",19950,19650,7654890,"od");  
  pPerson[4] = new CMitarbeiter("Gustaadfafv2","Hugdfado",199540,13241960,7321890,"ad");
  pPerson[5] = new CMitarbeiter("Gustav3","Hugo",1990,1960,7890,"USS");

  pPerson[6] =new CChef("Bla","Franz1","Joseph",1960,1930,865462,"Geschaeftsfuehrung");
  pPerson[7] =new CChef("Bla","Franz2","Joseph",1960,1930,865462,"Geschaeftsfuehrung");
  pPerson[8] =new CChef("Bla","Franz3","Joseph",1960,1930,865462,"Geschaeftsfuehrung");
  
  pPerson[9] = new CKunde("Hugo", "Erwin", 12345);
  pPerson[10]= new CKunde("Froehlich","Klaus",07347);
  pPerson[11]= new CKunde("Hans","Ferharf",07547);
    
  for(int x=0;y<=10;y++)
  {
    pPerson[y]->Ausgabe();
     
    delete pPerson[y];
   }   
  
 return 0;
}


Bitte nicht sauer sein wenn die Namen mit euren übereinstimmen.

So nun zu Aufgabe 3:

Erstelle ein Programm zuer Erfassung von den verschiedenen Personentypen und verwende Ausgaberotine von Punkt 2 für die erfassten Personen (ein Zeigearray verwenden)

Ich hab mich schon daran versucht aber wenn ich Zahlen für Gehalt etc eingegeben habe wurde bei der Ausgabe nur irgendein Speicherwert (-98032464) ausgegeben.

habt ihr für Aufgabe 3 eine Idee?

Danke schon einmal im Vorraus

mfg Most

ps: Das ist keine Schulaufgabe etc. D.h. ich ihr müsst nicht für mich Hausaufgaben machen :-D
Diese Aufgabe stammt aus einem C++ Skript von einem Kumpel und das hab ich mir einfach einmal ausgeliehen^^
 
Da Du objektorientiert arbeitest, solltest Du evtl. auch dei STL-string-Klasse verwenden anstatt der char-Arrays (bei den STL-Headern wird das .h weggelassen). Zur Speicherung der Personen würde ich auch statt des Arrays eine STL-Liste verwenden (siehe unten).

Außerdem solltest Du Dir gleich ein paar Regeln angewöhnen:
1. Die Klassendefinition mit der Deklaration der Memberfunktionen und -variablen in die Headerdatei, die Definition der Memberfunktionen in die cpp-Datei.
2. Membervariablen werden i.A. mit einem vorangestellten m_ gekennzeichnet.
3. Den Typ als präfix dem Variablennamen voranstellen (z.B. str für string, i für int, c für char usw.)

Diese Regeln helfen später ungemein, sich in den Codedateien größerer Projekte zurechtzufinden und den Code zu verstehen, da man sofort aus dem Variablennamen erkennen kann, ob es eine Membervariable ist und welchen Datentyp sie hat.

Hier ein Beispiel:

Datei Person.h:
Code:
#include "stdafx.h"
#include <iostream>
#include <string>
 
using namespace std;
 
class CPerson
{
public:
  CPerson();
  CPerson(const string & strName, const string & strVorname);
 
   virtual void Ausgabe();
 
protected:
  string m_strName;
  string m_strVorname;
};
Datei Person.cpp:
Code:
CPerson::CPerson(const string & strName, const string & strVorname) :
  m_strName(strName),
  m_strVorname(strVorname)
{
}

Zu Teil 3 der Aufgabe:

Da schreibst du am besten eine Menüführung in die main-Funktion, etwa so:

Datei Erfassung.cpp:

Code:
#include "Erfassung.h"
#include "Person.h"
#include "Mitarbeiter.h"
...
#include <conio.h>
 
using namespace std;
...
 
list<CPerson*> listPersons;
 
int main(int argc, char * argv)
{
  int iMenuSelection(-1);
 
  cout << "Personenerfassung" << endl << endl;
 
  do
  {
    cout << "Bitte Menüpunkt auswählen" << endl;
    cout << "1 - Person eingeben" << endl;
    cout << "2 - Person löschen" << endl;
    cout << "3 - Personen auflisten" << endl << endl;
    cout << "9 - Beenden" << endl << endl;
 
    iMenuSelection = _getch();
 
    switch(iMenuSelection)
    {
      case 1:
        PersonHinzufuegen();
        break;
      case 2:
        PersonLoeschen();
        break;
      case 3:
        PersonenAuflisten();
        break;
      case 9:
        break;
      default:
        cout << "Unbekannter Menüpunkt!" << endl;
        break;
    }
  }while(iMenuSelection != 9);
 
  cout << "Programm beendet" << endl;
}
 
void PersonHinzufuegen()
{
  string strName, strVorname;
  t_PersonenTyp enumPersonenTyp = PT_UNKNOWN;
 
  //Hier mit einem Untermenü erst den Personentyp abfragen
 
 
  //Dann Name und Vorname und je nach Personentyp weitere Daten abfragen,
  //dann Person anlegen und an die Liste anhängen
 
  CPerson *pPerson = NULL;
  switch(enumPersonenTyp)
  {
    case PT_UNKNOWN:
      cout "Unbekannter Personentyp" << endl;
      return;
    case PT_MITARBEITER:
      //Mitarbeiterdaten abfragen
      ....
      pPerson = new CMitarbeiter(......);
      break;
    case PT_CHEF:
      //Chefdaten abfragen
      ....
      pPerson = new CChef(......);
      break;
    case PT_KUNDE:
      //Kundendaten abfragen
      ....
      pPerson = new CKunde(......);
      break;
  }
 
  if(pPerson  != NULL)
    listPersons.push_back(pPerson );
}
 
void PersonLoeschen()
{
   //Namen abfagen, Person in Liste suchen und dann aus der Liste löschen
}
 
void PersonenAuflisten()
{
  list<CPerson*>::iterator itPerson = listPersons.begin();
  while(itPerson != listPersons.end())
  {
    (*itPerson)->Ausgabe();
    itPerson++;
  }
}

Datei Erfassung.h:
Code:
typedef enum
{
  PT_UNKNOWN = 0,
  PT_MITARBEITER,
  PT_CHEF,
  PT_KUNDE
}t_PersonenTyp;
 
void PersonHinzufuegen();
void PersonLoeschen();
void PersonenAuflisten();

So in etwa würde ich das erstmal machen. Da hast du auch noch gleich eine kleine einführing in die Benutzung der STL-Listenklasse und des Iterators. Ich hab' Dir noch ein wenig zum selberprogrammieren gelassen. Auch zum laufen mußt Du es erstmal selber bringen, der Code ist nämlich nicht getestet ;-)
 
Hi

erstmal danke für deine schnelle Antwort.
Ich habe dein Programm jetzt ausgebaut hab aber ein paar Probleme.

Der Kompiler giebt folgende errors aus:

Firma4.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall CKunde::CKunde(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<cha
r>,class std::allocator<char> > const &,int const &)" (0CKunde@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@0ABH@Z)
Firma4.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall CChef::CChef(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>
,class std::allocator<char> > const &,int const &,int const &,int const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator
<char> > const &)" (0CChef@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@0ABH1100@Z)
Firma4.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall CMitarbeiter::CMitarbeiter(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::cha
r_traits<char>,class std::allocator<char> > const &,int const &,int const &,int const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (0CMitarbeiter@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@
V?$allocator@D@2@@std@@0ABH110@Z)
Firma4.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall CPerson::CPerson(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<c
har>,class std::allocator<char> > const &)" (0CPerson@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@0@Z)
Debug/Firma4.exe : fatal error LNK1120: 4 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.

Firma4.exe - 5 Fehler, 0 Warnung(en)


hier kommt der Code:

Firma4.CPP
Code:
#include "stdafx.h"
#include "Erfassung.h"
#include "Person.h"
#include "Mitarbeiter.h"
#include "Chef.h"
#include "Kunde.h"
#include <conio.h>
 
using namespace std;
list <CPerson*> listPersons;
 
int main(int argc, char * argv)
{
  int iMenuSelection(-1);
  cout << "Personenerfassung" << endl << endl;
  do
  {
    cout << "Bitte Menüpunkt auswählen" << endl;
    cout << "1 - Person eingeben" << endl;
    cout << "2 - Person löschen" << endl;
    cout << "3 - Personen auflisten" << endl << endl;
    cout << "9 - Beenden" << endl << endl;
 
    iMenuSelection = _getch();
 
    switch(iMenuSelection)
    {
      case 1:
        PersonHinzufuegen();
        break;
      case 3:
        PersonenAusgeben();
        break;
      case 9:
        break;
      default:
        cout << "Unbekannter Menüpunkt!" << endl;
        break;
    }
  }while(iMenuSelection != 9);
 
  cout << "Programm beendet" << endl;
return 0;
}

void PersonHinzufuegen()
{
  char Name1[256];
  char Vorname1[256];
  char Abteilung1[256];
  char Firma1[256];

  int Gehalt1,Einstellungsdatum1,Geburtsdatum1,Telefonnummer1;

  string strName, strVorname;
  t_PersonenTyp enumPersonenTyp = PT_UNKNOWN;
  
  cout<<"Welcher Person moechten sie hinzufuegen? "<<endl;
  cout<<"1 - Person \n";
  cout<<"2 - Mitarbeiter \n";
  cout<<"3 - Chef \n";
  cout<<"4 - Kunde \n";
  cout<<"9 - Zurüeck \n";
  
  //Dann Name und Vorname und je nach Personentyp weitere Daten abfragen,
  //dann Person anlegen und an die Liste anhängen
 
  CPerson *pPerson = NULL;
  switch(enumPersonenTyp)
  {
    case PT_UNKNOWN:
      cout<<"Unbekannter Personentyp" << endl;
      return;
    case PT_PERSON:
      cout<<"Bitte Namen eingeben \n";
      cin>>Name1;
      cout<<"Bitte Vorname eingeben \n";
      cin>>Vorname1;
      pPerson = new CPerson(Name1,Vorname1);
      break;

    case PT_MITARBEITER:
      cout<<"Bitte Namen eingeben \n";
      cin>>Name1;
      cout<<"Bitte Vorname eingeben \n";
      cin>>Vorname1;
      cout<<"Bitte Einstellungsjah eingeben \n";
      cin>>Einstellungsdatum1;
      cout<<"Bitte Geburtsjahr  eingeben \n";
      cin>>Geburtsdatum1;
      cout<<"Bitte Gehalt eingeben \n";
      cin>>Gehalt1;
      cout<<"Bitte Abteilung eingeben \n";
      cin>>Abteilung1;
      pPerson = new CMitarbeiter(Name1,Vorname1,Einstellungsdatum1,Geburtsdatum1,Gehalt1,Abteilung1);
      break;
    case PT_CHEF:
      cout<<"Bitte Namen eingeben \n";
      cin>>Name1;
      cout<<"Bitte Vorname eingeben \n";
      cin>>Vorname1;
      cout<<"Bitte Einstellungsjah eingeben \n";
      cin>>Einstellungsdatum1;
      cout<<"Bitte Geburtsjahr  eingeben \n";
      cin>>Geburtsdatum1;
      cout<<"Bitte Gehalt eingeben \n";
      cin>>Gehalt1;
      cout<<"Bitte Abteilung eingeben \n";
      cin>>Abteilung1;
      cout<<"Bitte Firma eingeben \n";
      cin>>Firma1;
      
      pPerson = new CChef(Name1,Vorname1,Einstellungsdatum1,Geburtsdatum1,Gehalt1,Abteilung1,Firma1);
      break;
    case PT_KUNDE:
      cout<<"Bitte Namen eingeben \n";
      cin>>Name1;
      cout<<"Bitte Vorname eingeben \n";
      cin>>Vorname1;
      cout<<"Bitte Telefonnummer eingeben \n";
      cin>>Telefonnummer1;
      pPerson = new CKunde(Name1,Vorname1,Telefonnummer1);
      break;
  }
 
  if(pPerson  != NULL)
    listPerson.push_back(pPerson);
}
 
void PersonenAusgeben()
{
  list<CPerson*>::iterator itPerson = listPersons.begin();
  while(itPersons != listPersons.end())
  {
    (*itPerson)->Ausgabe();
    itPerson++;
  }
}

void CPerson::Ausgabe();
{
  cout<<"Name " <<m_strName <<endl;
  cout<<"Vorname " <<m_strVorname <<endl;
}

void CMitarbeiter::Ausgabe();
{
  CPerson::Ausgabe();
  cout<<"Abteilung: "  <<m_strAbteilung <<endl;
  cout<<"Einstellungsjahr:" <<m_iEinstellungsdatum <<endl;
  cout<<"Geburtsjahr: "<<m_iGeburtsdatum <<endl;
  cout<<"Gehalt: " <<m_iGehalt <<endl;
}

void CChef::Ausgabe();
{
  CMitarbeiter::Ausgabe();
  cout<<"Firma: "  <<m_strFirma <<endl;
}

void CKunde::Ausgabe();
{
  CPerson::Ausgabe();
  cout<<"Telefonnummer: " <<m_iTelefonnummer <<m_iGehalt <<endl;
}

falls du den Quellcode von den Headderdateien auch benötigst einfach schreiben
Huch jetzt hat er anstatt ; ) immer ein smile gemacht :-D
mfg
Most
 
Zuletzt bearbeitet:
hi
mir ist gerade aufgefallen das ich in dem obigen beispiel die Konstruktoren überhaupt nicht verwende.
Könnte das der Fehler sein?
 
Du verwendest die Konstruktoren doch, und zwar beim Afruf von new, z.b.:
Code:
pPerson = new CPerson(Name1,Vorname1);
Das bedeutet, daß der Konstruktor der Klasse CPerson aufgerufen wird, um ein Objekt dieser Klasse zu erzeugen.

Dein Fehler kommt daher, daß Du offensichtlich die Objektdateien, die aus den Codedateien durch den Compiler erzeugt werden nicht alle zusammenlinkst. Um Dir zu sagen, wie Du das machen sollst, müßte ich allerdings wissen, welche Entwicklungsumgebung bzw. welchen Compiler Du verwendest.
 
Dann mußt Du nur alle Dateien in Dein Projekt einfügen. Dazu gehst Du im Menü auf den Menüpunkt 'Projekt->Dem Projekt hinzufügen->Dateien' und wählst die zum Projekt gehörigen Dateien aus, also alle *.h und *.cpp (oder *.c) Dateien. Nachdem Du auf OK geklickt hast, erscheinen diese Dateien in der Dateiliste des Projektes. Nun weiß der Compiler, welche Dateien er zu Objektdateien (*.o) kompilieren muß und der Linker, welche Objektdateien er zur ausführbaren Datei (*.exe) zusammenlinken muß.
 
Hi ich schick dir jetzt einfach einmal meinen kompletten code, da der Compiler jetzt probleme hat eine include datei zu öffnen.

Compilerfehler:
\programme\microsoft visual studio\vc98\include\ios.h(146) : error C2872: 'streambuf' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ios.h(159) : error C2872: 'ostream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ios.h(159) : error C2872: 'ostream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ios.h(160) : error C2872: 'ostream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ios.h(180) : error C2872: 'streambuf' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ios.h(207) : error C2872: 'streambuf' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ios.h(210) : error C2872: 'streambuf' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ios.h(219) : error C2872: 'ostream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\streamb.h(90) : error C2872: 'streampos' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\streamb.h(90) : error C2872: 'streamoff' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\streamb.h(91) : error C2872: 'streampos' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\streamb.h(91) : error C2872: 'streampos' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ios.h(258) : error C2872: 'ios' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ios.h(258) : error C2872: 'ios' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ios.h(259) : error C2872: 'ios' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ios.h(259) : error C2872: 'ios' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ios.h(260) : error C2872: 'ios' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ios.h(260) : error C2872: 'ios' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ios.h(272) : error C2872: 'ostream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ios.h(272) : error C2872: 'ostream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ios.h(272) : error C2872: 'ostream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ios.h(273) : error C2872: 'ostream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ios.h(290) : error C2872: 'streambuf' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(67) : error C2872: 'streambuf' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(74) : error C2872: 'ios' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(74) : error C2872: 'ios' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(90) : error C2872: 'streambuf' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(102) : error C2872: 'streambuf' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(117) : error C2872: 'streampos' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(118) : error C2872: 'streamoff' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(119) : error C2872: 'streampos' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(126) : error C2872: 'streambuf' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(132) : error C2872: 'ios' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(139) : error C2872: 'istream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(140) : error C2872: 'istream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(140) : error C2872: 'ios' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(140) : error C2872: 'ios' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(142) : error C2872: 'istream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(143) : error C2872: 'istream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(145) : error C2872: 'istream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(146) : error C2872: 'istream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(148) : error C2872: 'istream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(149) : error C2872: 'istream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(150) : error C2872: 'istream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(152) : error C2872: 'istream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(153) : error C2872: 'istream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(155) : error C2872: 'istream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(156) : error C2872: 'istream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(157) : error C2872: 'istream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(159) : error C2872: 'istream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(161) : error C2872: 'istream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(162) : error C2872: 'istream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(167) : error C2872: 'streambuf' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(169) : error C2872: 'istream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(169) : error C2872: 'istream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(170) : error C2872: 'istream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(170) : error C2872: 'streambuf' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(175) : error C2872: 'istream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(175) : error C2872: 'istream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(177) : error C2872: 'ios' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(177) : error C2872: 'ios' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(178) : error C2872: 'ios' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(178) : error C2872: 'ios' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(179) : error C2872: 'ios' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\istream.h(179) : error C2872: 'ios' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(62) : error C2872: 'streambuf' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(70) : error C2872: 'ios' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(70) : error C2872: 'ios' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(87) : error C2872: 'streambuf' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(94) : error C2872: 'streampos' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(95) : error C2872: 'streamoff' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(96) : error C2872: 'streampos' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(101) : error C2872: 'streambuf' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(107) : error C2872: 'ios' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(112) : error C2872: 'ostream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(113) : error C2872: 'ostream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(113) : error C2872: 'ios' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(113) : error C2872: 'ios' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(115) : error C2872: 'ostream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(116) : error C2872: 'ostream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(118) : error C2872: 'ostream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(119) : error C2872: 'ostream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(121) : error C2872: 'ostream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(123) : error C2872: 'ostream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(124) : error C2872: 'ostream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(126) : error C2872: 'ostream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(127) : error C2872: 'ostream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(133) : error C2872: 'streambuf' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(135) : error C2872: 'ostream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(135) : error C2872: 'ostream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(136) : error C2872: 'ostream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(136) : error C2872: 'streambuf' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(143) : error C2872: 'ostream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(143) : error C2872: 'ostream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(144) : error C2872: 'ostream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(144) : error C2872: 'ostream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(145) : error C2872: 'ostream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(145) : error C2872: 'ostream' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(147) : error C2872: 'ios' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(147) : error C2872: 'ios' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(148) : error C2872: 'ios' : Mehrdeutiges Symbol
c:\programme\microsoft visual studio\vc98\include\ostream.h(148) : fatal error C1003: Mehr als 100 Fehler gefunden; Kompilierung wird abgebrochen.
Fehler beim Ausführen von cl.exe.

Firma4.exe - 102 Fehler, 0 Warnung(en)

Firma4.cpp
Code:
#include "stdafx.h"
#include "Erfassung.h"
#include <iostream.h>
#include <conio.h>
#include <list>
 
using namespace std;
list <CPerson*> listPersons;






int main(int argc, char * argv)
{
  int iMenuSelection(-1);
  cout<<"Personenerfassung" << endl << endl;
  do
  {
    cout << "Bitte Menüpunkt auswählen" << endl;
    cout << "1 - Person eingeben" << endl;
    cout << "2 - Person löschen" << endl;
    cout << "3 - Personen auflisten" << endl << endl;
    cout << "9 - Beenden" << endl << endl;
 
    iMenuSelection = _getch();
 
    switch(iMenuSelection)
    {
      case 1:
        PersonHinzufuegen();
        break;
      case 3:
        PersonenAusgeben();
        break;
      case 9:
        break;
      default:
        cout << "Unbekannter Menüpunkt!" << endl;
        break;
    }
  }while(iMenuSelection != 9);
 
  cout << "Programm beendet" << endl;
return 0;
}

void PersonHinzufuegen()
{
  char Name1[256];
  char Vorname1[256];
  char Abteilung1[256];
  char Firma1[256];

  int Gehalt1,Einstellungsdatum1,Geburtsdatum1,Telefonnummer1;

  string strName, strVorname;
  t_PersonenTyp enumPersonenTyp = PT_UNKNOWN;
  
  cout<<"Welcher Person moechten sie hinzufuegen? "<<endl;
  cout<<"1 - Person \n";
  cout<<"2 - Mitarbeiter \n";
  cout<<"3 - Chef \n";
  cout<<"4 - Kunde \n";
  cout<<"9 - Zurüeck \n";
  
  //Dann Name und Vorname und je nach Personentyp weitere Daten abfragen,
  //dann Person anlegen und an die Liste anhängen
 
  CPerson *pPerson = NULL;
  switch(enumPersonenTyp)
  {
    case PT_UNKNOWN:
      cout<<"Unbekannter Personentyp" << endl;
      return;
    case PT_PERSON:
      cout<<"Bitte Namen eingeben \n";
      cin>>Name1;
      cout<<"Bitte Vorname eingeben \n";
      cin>>Vorname1;
      pPerson = new CPerson(Name1,Vorname1);
      break;

    case PT_MITARBEITER:
      cout<<"Bitte Namen eingeben \n";
      cin>>Name1;
      cout<<"Bitte Vorname eingeben \n";
      cin>>Vorname1;
      cout<<"Bitte Einstellungsjah eingeben \n";
      cin>>Einstellungsdatum1;
      cout<<"Bitte Geburtsjahr  eingeben \n";
      cin>>Geburtsdatum1;
      cout<<"Bitte Gehalt eingeben \n";
      cin>>Gehalt1;
      cout<<"Bitte Abteilung eingeben \n";
      cin>>Abteilung1;
      pPerson = new CMitarbeiter(Name1,Vorname1,Einstellungsdatum1,Geburtsdatum1,Gehalt1,Abteilung1);
      break;
    case PT_CHEF:
      cout<<"Bitte Namen eingeben \n";
      cin>>Name1;
      cout<<"Bitte Vorname eingeben \n";
      cin>>Vorname1;
      cout<<"Bitte Einstellungsjah eingeben \n";
      cin>>Einstellungsdatum1;
      cout<<"Bitte Geburtsjahr  eingeben \n";
      cin>>Geburtsdatum1;
      cout<<"Bitte Gehalt eingeben \n";
      cin>>Gehalt1;
      cout<<"Bitte Abteilung eingeben \n";
      cin>>Abteilung1;
      cout<<"Bitte Firma eingeben \n";
      cin>>Firma1;
      
      pPerson = new CChef(Name1,Vorname1,Einstellungsdatum1,Geburtsdatum1,Gehalt1,Abteilung1,Firma1);
      break;
    case PT_KUNDE:
      cout<<"Bitte Namen eingeben \n";
      cin>>Name1;
      cout<<"Bitte Vorname eingeben \n";
      cin>>Vorname1;
      cout<<"Bitte Telefonnummer eingeben \n";
      cin>>Telefonnummer1;
      pPerson = new CKunde(Name1,Vorname1,Telefonnummer1);                                                                                                                                    
      break;
  }
 
  if(pPerson  != NULL)
    listPersons.push_back(pPerson);
}
 
void PersonenAusgeben()
{
  list<CPerson*>::iterator itPersons = listPersons.begin();
  while(itPersons != listPersons.end())
  {
    (*itPersons)->Ausgabe();
    itPersons++;
  }
}

void CPerson::Ausgabe()
{
  cout<<"Name " <<iName1 <<endl;
  cout<<"Vorname " <<iVorname1 <<endl;
}

void CMitarbeiter::Ausgabe()
{
  CPerson::Ausgabe();
  cout<<"Abteilung: "  <<m_strAbteilung <<endl;
  cout<<"Einstellungsjahr:" <<m_iEinstellungsdatum <<endl;
  cout<<"Geburtsjahr: "<<m_iGeburtsdatum <<endl;
  cout<<"Gehalt: " <<m_iGehalt <<endl;
}

void CChef::Ausgabe()
{
  CMitarbeiter::Ausgabe();
  cout<<"Firma: "  <<m_strFirma <<endl;
}

void CKunde::Ausgabe()
{
  CPerson::Ausgabe();
  cout<<"Telefonnummer: " <<m_iTelefonnummer <<endl;
}

Person.h
Code:
#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;

 
class CPerson
{
public:
  CPerson();
  CPerson(const string & strName, const string & strVorname);
 
   virtual void Ausgabe();
 
protected:
  string m_strName;
  string m_strVorname;
};

Mitarbeiter.h
Code:
#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;


 


class CMitarbeiter : public CPerson
{
public:
  CMitarbeiter();
  CMitarbeiter(const string & strName, const string & strVorname, const int  & iEinstellung,const int & iGeburtsdatum, const int & iGehalt, const string & strAbteilung);
 
   virtual void Ausgabe();
 
protected:
  
  int m_iEinstellungsdatum;
  int m_iGeburtsdatum;
  int m_iGehalt;
  string m_strAbteilung;
};

Chef.h
Code:
#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;

class CChef : public CMitarbeiter
{
public:
  CChef();
  CChef(const string & strName, const string & strVorname,const int & iEinstellung, const int & iGeburtsdatum, const int & iGehalt, const string & strAbteilung,const string & strFirma);
 
   virtual void Ausgabe();
 
protected:
  
 string m_strFirma;
};
Kunde.h
Code:
#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;


 

 

class CKunde : public CPerson
{
public:
  CKunde();
  CKunde(const string & strName, const string & strVorname,const int & iTelefonnummer);
 
   virtual void Ausgabe();
 
protected:
  
 int m_iTelefonnummer;
};

StdAfx.h
Code:
// stdafx.h : Include-Datei für Standard-System-Include-Dateien,
//  oder projektspezifische Include-Dateien, die häufig benutzt, aber
//      in unregelmäßigen Abständen geändert werden.
//

#if !defined(AFX_STDAFX_H__D808D0FD_16DE_4011_9098_FB233AE854A7__INCLUDED_)
#define AFX_STDAFX_H__D808D0FD_16DE_4011_9098_FB233AE854A7__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define WIN32_LEAN_AND_MEAN		// Selten benutzte Teile der Windows-Header nicht einbinden

#include <stdio.h>

#include "Person.h"
#include "Mitarbeiter.h"
#include "Kunde.h"
#include "Chef.h"


// ZU ERLEDIGEN: Verweisen Sie hier auf zusätzliche Header-Dateien, die Ihr Programm benötigt

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ fügt zusätzliche Deklarationen unmittelbar vor der vorherigen Zeile ein.

#endif // !defined(AFX_STDAFX_H__D808D0FD_16DE_4011_9098_FB233AE854A7__INCLUDED_)
Erfassung.h
Code:
typedef enum
{
  PT_UNKNOWN = 0,
  PT_PERSON = 1,
  PT_MITARBEITER=2,
  PT_CHEF=3,
  PT_KUNDE=4,
}t_PersonenTyp;
 
void PersonHinzufuegen();
void PersonenAusgeben();


Kannst du dir den code mal ansehen und mir eventuell sagen wo der fehler liegt?

Ich habe das Programm ein wenig umgeändert um rum zu probieren und hab wohl etwas übersehen

mfg most
 
Er beißt sich daran, daß Du sowohl <iostream.h> als auch <iostream> includierst. Wenn Du das include von iostream.h wegläßt sollte es schon funktionieren.

Sauberer wäre es, wenn Du die includes wie folgt machen würdest:

Firma4.cpp (Würde ich in Erfassung.cpp ändern, dann aber auch in der Dateiliste des Projektes ändern):
Code:
#include "stdafx.h"
#include "Erfassung.h"
#include "Mitarbeiter.h"
#include "Kunde.h"
#include "Chef.h"
#include <conio.h>
#include <iostream>
#include <list>
(Wobei das include "Mitarbeiter.h" obsolet ist, da es schon in Chef.h includiert ist)

Person.h:
Code:
#include <string>

Person.cpp:
Code:
#include "stdafx.h"
#include "Person.h"
#include <iostream>

Mitarbeiter.h:
Code:
#include "Person.h"

Mitarbeiter.cpp:
Code:
#include "stdafx.h"
#include "Mitarbeiter.h"
#include <iostream>

Chef.h:
Code:
#include "Mitarbeiter.h"

Chef.cpp:
Code:
#include "stdafx.h"
#include "Chef.h"
#include <iostream>

Kunde.h:
Code:
#include "Person.h"

Kunde.cpp:
Code:
#include "stdafx.h"
#include "Kunde.h"
#include <iostream>

stdafx.h:
Code:
// stdafx.h : Include-Datei für Standard-System-Include-Dateien,
//  oder projektspezifische Include-Dateien, die häufig benutzt, aber
//      in unregelmäßigen Abständen geändert werden.
//
 
#if !defined(AFX_STDAFX_H__D808D0FD_16DE_4011_9098_FB233AE854A7__INCLUDED_)
#define AFX_STDAFX_H__D808D0FD_16DE_4011_9098_FB233AE854A7__INCLUDED_
 
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
 
#define WIN32_LEAN_AND_MEAN // Selten benutzte Teile der Windows-Header nicht einbinden
 
#include <stdio.h>
 
 
// ZU ERLEDIGEN: Verweisen Sie hier auf zusätzliche Header-Dateien, die Ihr Programm benötigt
 
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ fügt zusätzliche Deklarationen unmittelbar vor der vorherigen Zeile ein.
 
#endif // !defined(AFX_STDAFX_H__D808D0FD_16DE_4011_9098_FB233AE854A7__INCLUDED_)

Erfassung.h kannst Du lassen.

Weiterhin solltest Du bei jeder Headerdatei eine Mehrfachincludierung ausschließen, indem Du die ganze Headerdatei in

Code:
#ifndef HEADERNAME_H
#define HEADERNAME_H
 
...
//hier der Code der Headerdatei
 
...
 
#endif
einschließt. Das HEADERNAME mußt Du natürlcih durch den Namen der jeweiligen Headerdatei ersetzen.

Ich bin jetzt erstmal weg und werde erst morgen wieder reinschauen.
 
Zuletzt bearbeitet:
Hi,

Danke für deine schnelle Antwort. Ich war das ganze wochenende über nicht da und konnte somit deinen Beitrag erst heute lesen.

Ich versteh nicht ganz den unterschied zwischen Chef.h und Chef.cpp.

Ist mit .cpp eventuell dieser code hier gemeint?

#ifndef HEADERNAME_H
#define HEADERNAME_H

...
//hier der Code der Headerdatei

...

#endif


oder muss das einfach auch in die Datei Chef.h?

MFG
MostWanteD
 
Zurück