Mehrere Dateien verbinden



  • Hallo,
    versuche eine Datenbank zu erstellen. Habe jetzt die einzelnen Abschnitte in verschiedene Dateien verteilt.

    Wie bekomme ich das zum laufen. Habe nach bestem Wissen versucht die Headerdatei zu erstellen.

    #include <iostream>
    #include "kaempfer.h"
    
    using namespace std;
    
    //Definition der einzelnen Menupunkte
    enum states {
        hauptmenu,
        kaempfer_verwalten,
        kaempfer_anlegen,
        ....
    };
    states mystate;
    
    //Funktionsdeklarationen
    bool update();
    void start();
    void menu_kae_anlegen();
    ...
    
    //Aufruf der einzelnen Menues
    bool update(){
        bool beenden=false;
    	if(mystate==hauptmenu)	               {start();}
    	else if(mystate==kaempfer_anlegen)     {menu_kae_anlegen();}
            ...
    	else if(mystate==ende)	               {beenden=programm_beenden();}
    	return beenden;
    }
    void start(){
        int auswahl=0;
    
            cout<<"-------- Datenbank --------"<<endl;
    	cout<<"---------------------------------"<<endl;
    	cout<<"Was moechtest du tun?------------"<<endl;
    	cout<<"[1] Kaempfer verwalten-----------"<<endl;
    	cout<<"[2] Event verwalten--------------"<<endl;
    	cout<<"[3] Programm beenden-------------"<<endl;
    
    	cin>>auswahl;
        if(auswahl==1){mystate=kaempfer_verwalten;}
        else if (auswahl==2){mystate=event_verwalten;}
        else if (auswahl==3){mystate=ende;}
    }
    
    ...
    
    void menu_kae_anlegen(){
        cout<<"---------Kaempfer anlegen--------"<<endl;
    
        //Definieren
    
        cout<<"--------Kaempfer angelegt--------"<<endl;
    }
    
    ...
    
    //Hauptprogramm
    int main (){
    	bool ende=false;
    	mystate=hauptmenu;
    	do {
    		ende=update();
    	} while (ende==false);
    
    	return 0;
    }
    

    Soweit zu meiner main.cpp

    Wie müssen kaempfer.cpp und kaempfer.h aussehen, damit ich ordentlich darauf zugreifen kann????

    //kaempfer.cpp
    #include "kaempfer.h"
    
    kaempfer::kaempfer(){}
    kaempfer::~kaempfer(){}
    
    //kaempfer.h
    #ifndef KAEMPFER_H
    #define KAEMPFER_H
    
    #include <iostream>
    #include <string>
    using namespace std;
    class kaempfer {
    	private:
            ... //Attribute
    
    	public:
            //Konstruktor und Destruktor
            kaempfer (... Attribute);
            virtual ~kaempfer();
    
            //Methoden
            string getname();
            string getvorname(){return vorname;}
            string getnachname(){return nachname;}
            ...
    };
    
    //Methodendefinitonen
    kaempfer::kaempfer(string vname="Max", string nname="Mustermann",...){
    	cout<<"Eingabe der Kämpferdaten."<<endl;
    	char ende;
    	do{
    		ende='n';
    		cout<<"Vorname: ";
    		cin>>vname;
    		cout<<"Nachname: ";
    		...
    }
    string kaempfer::getname(){
    	string name=vorname+" "+nachname;
    	return name;
    }
    
    #endif // KAEMPFER_H
    

  • Mod

    //kaempfer.h
    #ifndef KAEMPFER_H
    #define KAEMPFER_H
    
    #include <string>
    
    class kaempfer {
        private:
    
        public:
            //Konstruktor und Destruktor
            kaempfer (... Attribute);
            virtual ~kaempfer();
    
            //Methoden
            std::string getname();
            std::string getvorname(){return vorname;}
            std::string getnachname(){return nachname;}
    };
    #endif // KAEMPFER_H
    
    //kaempfer.cpp
    #include <iostream>
    #include "kaempfer.h"
    using namespace std; 
    
    kaempfer::~kaempfer(){}	
    
    kaempfer::kaempfer(string vname="Max", string nname="Mustermann",...){
        cout<<"Eingabe der Kämpferdaten."<<endl;
        char ende;
        do{
            ende='n';
            cout<<"Vorname: ";
            cin>>vname;
            cout<<"Nachname: ";
            ...
    }
    
    string kaempfer::getname(){
        string name=vorname+" "+nachname;
        return name;
    }
    


  • Bin zu blöd.
    Bekomme folgende Fehlermeldungen.

    In main.cpp mit

    ...
    int main(){
      kaempfer f;
      ...
      return 0;
    }
    

    undefined reference to 'kaempfer::kaempfer()'
    error: ld returned 1 exit status

    und beim kompilieren von kaempfer.cpp
    undefined reference to 'vtable for kaempfer'
    undefined reference to "WinMain@16"

    //main.cpp
    
    #include <iostream>
    #include "kaempfer.h"
    using namespace std;
    
    ...
    ...
    ...
    //Hauptprogramm
    int main (){
    	bool ende=false;
            kaempfer f;
    	mystate=hauptmenu;
    	do {ende=update();} while (ende==false);
    	return 0;}
    
    //kaempfer.h
    
    #ifndef KAEMPFER_H
    #define KAEMPFER_H
    #include <string>
    
    using namespace std;
    
    class kaempfer {
        private:
            string vorname;
            string nachname;
            int gebtag;
            ...
    
        public:
            //Konstruktor und Destruktor
            kaempfer();
            virtual ~kaempfer();
    
            //Auslesen von Kaempferdaten
            string getname();
            string getvorname(){return vorname;}
            string getnachname(){return nachname;}
            int getgebtag(){return gebtag;}
            ...
            void getstats();
    
            ...
    
    };
    #endif // KAEMPFER_H
    
    //kaempfer.cpp
    
    #include "kaempfer.h"
    #include <string>
    #include <iostream>
    using namespace std;
    
    kaempfer::kaempfer(){
    	cout<<"Eingabe der Kämpferdaten."<<endl;
        cout<<"Vorname: ";
        cin>>vorname;
        cout<<"Nachname: ";
        cin>>nachname;
        cout<<"Geburtstag eingeben."<<endl;
        cout<<"Tag: ";
        cin>>gebtag;
        ...
    }
    string kaempfer::getname(){
    	string name=vorname+" "+nachname;
    	return name;
    }
    void kaempfer::getstats(){
    	cout<<siege<<" - "<<niederlagen<<" - "<<unentschieden<<endl;
    }
    


  • g++ -c main.cpp
    g++ -c kaempfer.cpp
    g++ main.o kaempfer.o -o meinProgramm
    

  • Mod

    Was manni66 sagte. Ich wollte aber noch hinzufügen, dass ich die subtilen Änderungen an deinen Dateien nicht ohne Grund gemacht habe. Schau sie dir genau an! Beispielsweise hat das using namespace in dem Header nichts zu suchen.



  • Habe mir noch einmal das erste Post SeppJ angeschaut. Was ich nicht verstehe ist, was in welche Datei kommt.

    In der header-Datei wird scheinbar die Klasse definiert.
    class kaempfer {...}

    Wohin kommen meine Attribute?
    Es ist zwar private geschrieben, aber da meine "..." gelöscht wurden gehe ich davon aus das die da nichts zu suchen haben.

    Schreibe ich in den header nur die Prototypen der Methoden? Hier sind Konstruktor, Destruktor und drei methoden (mit und ohne Definition) angegegeben.

    In der .cpp-Datei sind die Definitionen des Kon-/Destruktors sowie weitere Methoden.

    Bin verwirrt. 😕


  • Mod

    sigmar schrieb:

    Wohin kommen meine Attribute?
    Es ist zwar private geschrieben, aber da meine "..." gelöscht wurden gehe ich davon aus das die da nichts zu suchen haben.

    Doch, die kommen da schon hin. Die Punkte habe ich gelöscht, weil sie mich beim Formatieren des Codes gestört haben.

    Schreibe ich in den header nur die Prototypen der Methoden? Hier sind Konstruktor, Destruktor und drei methoden (mit und ohne Definition) angegegeben.

    Beides ist möglich. In der Regel definiert man in der Klasse (Nicht nur im Header, sondern wirklich in der Klasse selbst!) nur sehr kurze Methoden. Das ist äquivalent zur Nutzung des inline-Schlüsselwortes. Ich dachte, es wäre bereits deine Absicht gewesen, die verschiedenen Möglichkeiten zu demonstrieren, da du deine Definitionen überall verteilt hattest. Ich habe deine Vorgaben beibehalten.


Anmelden zum Antworten