Grundsatzfrage zum inkludieren von Headern



  • Hallo nochmal !

    Als Beispiel sei das Lottoprogramm gegeben, dass Dank eurer kleinen (wenn auch sehr nützlichen) Hilfe reibungslos funktioniert.
    Diesmal verlagere ich die Funktionalität in eine Klasse...:

    Gegeben sind drei Dateien: main.cpp lotto.h lotto.cpp

    Die Headerdatei lotto.h deklariert die Klasse:

    #ifndef _LOTTO_H
    #define _LOTTO_H
    
    #include <vector>
    
    class Lotto
    {
    public:
    	Lotto();
    
    	void run();
    
    private:
    	std::vector<int> liste;
    	int zufall;
    };
    #endif // _LOTTO_H
    

    -> soweit klar: kein Problem.

    Die dazugehörige Datei lotto.cpp beschreibt die Methoden, dazu inkludiert sie lotto.h:

    #include "lotto.h"
    #include <iostream>
    #include <ctime>
    
    Lotto::Lotto()
    : zufall(0)
    {
    	srand(time(NULL));	   // Zufallszahlen vorbereiten
    
    	// Vector init
    	for(int i=1; i<=49; ++i)
    	{
    		liste.push_back(i);
    	}
    }
    
    void Lotto::run()
    {
    	// Zahl ziehen ...
    	for(int i=0; i<6; ++i)
    	{
    		std::vector<int>::iterator it = liste.begin();
    		zufall = rand() % (49-i);
    		it += zufall;			 		   // Iterator zuweisen
    		std::cout << *it << " ";    	   // ausgeben
    		liste.erase(it);		   		   // löschen
    	}
    }
    

    -> soweit auch kein Problem .

    main.cpp inkludiert die Headerdatei lotto.h (!) und hier in diesem Beispiel auch
    lotto.cpp (!) -> anderenfalls lässt sich das Ganze nicht kompilieren, da ein nicht definierter Verweis auf Methoden von lotto.cpp :

    #include "lotto.h"
    #include "lotto.cpp"		// <---------- !
    
    int main(int argc, char const *argv[])
    {
    	Lotto *lotto = new Lotto;
    	lotto->run();
    	return 0;
    }
    

    Jetzt meine Frage: Ok: Das Programm funktioniert so. Aber ist es überhaupt guter Stil (hier) die lotto.cpp mitzuinkludieren ? In vielen Beispielen, die ich gelesen habe werden lediglich die Header inkludiert (z.B.: einfacher Qt-Dialog)- und wie durch Zauberhand funktioniert das und Header und dazugehörige cpp-Datei finden sich - nur bei mir nicht. Wie gesagt: wenn ich es weglasse schreit der Compiler.
    Mache ich etwas falsch oder muss dass hier so sein, da drei Dateien existieren ?
    Kompiliert wird mit:
    g++ -Wall -std=c++11 main.cpp -o main



  • g++ -Wall -std=c++11 main.cpp lotto.cpp -o main



  • Ah - Ok! ..... so einfach kann es sein : --> klar ! Eventuell sollte ich doch eine IDE benutzen, die das übernimmt ! Danke ! 🙂



  • Bei der musst du das aber auch in einem Projekt-(Menu/Dialog/Datei/sonstwas) eintragen.

    Da reicht für dich auch erstmal ein makefile für make



  • morbidMo schrieb:

    Aber ist es überhaupt guter Stil (hier) die lotto.cpp mitzuinkludieren ?

    nein.


Anmelden zum Antworten