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.