Money Making Machinist Geschrieben 7. März 2005 Geschrieben 7. März 2005 Hi, im Moment benutzte ich noch die Autorenversion von MSVC++6, aber eigentlich brauch ich die nur zum kompilieren, meinen eigentlichen Code schreibe ich in notepad++. Das alles tut nichts zur Sache. Mir gehts im allgemeinen darum, wie ich mir einen eigenen Header schreiben und den dann in meinen Quellcode einbinden. Falls es da Unterschiede bei Win/Linux (man weiß ja nie) geben sollte bei dieser Sache, bitte posten, ist mir sehr wichtig. Danke schon mal im Vorraus. Zitieren
Klotzkopp Geschrieben 7. März 2005 Geschrieben 7. März 2005 Prinzipiell gibt es da keine Unterschiede. Hast du ein konkretes Problem? Danke schon mal im Vorraus.Bitte nur ein 'r'. Zitieren
Money Making Machinist Geschrieben 8. März 2005 Autor Geschrieben 8. März 2005 Hmm, allgemein, was muss ich definieren, damit die Sache läuft. Zitieren
Klotzkopp Geschrieben 8. März 2005 Geschrieben 8. März 2005 Hmm, allgemein, was muss ich definieren, damit die Sache läuft.Allgemein: Deklaration in die Headerdatei, Definitionen in die Quellcodedatei. Die Frage ist aber ungefähr so genau zu beantworten wie "Was muss ich in den Topf tun, damit die Sache schmeckt" Es kommt eben darauf an, was du vorhast. Rein theoretisch könntest du auf Headerdateien auch komplett verzichten. Zitieren
Money Making Machinist Geschrieben 8. März 2005 Autor Geschrieben 8. März 2005 Okay, dann geb ich mal ein Beispiel von dem was ich vorhabe: Als ich hab da meinen Quellcode und so, der ist mir aber zu lang, also möcht ich ein paar Funktionen in einer Headerdatei auslagern, damit alles etwas übersichtlicher wird. Jetzt ist halt die Frag bei mir, was muss alles in den Header rein (Funktion+Funktion-Prototyp?), wo ich den Header dann speichern muss und wie ich den dann in mein main einfüge. Ich hoffe jetzt wirds klarer. Zitieren
carstenj Geschrieben 8. März 2005 Geschrieben 8. März 2005 Hallo, in Headerdateien kommen ausschließlich Deklarationen rein, Definitionen nur in Ausnahmefällen (Einzeiler oder Templates). Der Standardfall sieht so aus: // Datei: Rechne.hpp // Nur Deklarationen, also die Signatur der Funktion, Parameter, Rückgabewert... #ifndef RECHNE_HPP #define RECHNE_HPP int rechne(int zahl); #endif [/php] [php] // Datei: Rechne.cpp // Die Funktionsdefinition, also das, was die Funktion tut // Wichtig: Inkludiert die Deklaration #include "rechne.hpp" int rechne(int zahl) { return zahl*zahl; } // Main.cpp // Fügt das alles zusammen // Wichtig: Inkludiert auch die Deklaration von der Funktion... #include <iostream> #include "rechne.hpp" int main() { std::cout << rechne(2); } [/php] Diese Beispiel ist nur suboptimal, weil man eben genau das, da es sich um einen Einzeiler handelt, schonmal in die Headerdatei einfügt. Wenn es sich um eine längere Funktion handelt, bietet sich so eine Aufteilung an. Zitieren
Manfred.Becker Geschrieben 9. März 2005 Geschrieben 9. März 2005 Hi, so wie ich dich verstanden habe, willst du deinen (riesigen) Quellcode in mehrere Dateien aufteilen. Als ich hab da meinen Quellcode und so, der ist mir aber zu lang, also möcht ich ein paar Funktionen in einer Headerdatei auslagern, damit alles etwas übersichtlicher wird. Diese Dateien sind nicht zwangsläufig nur Header Dateien (*.h bzw *.hpp), sondern eben auch C-Dateien (*.c bzw *.cpp), die ich hier mal als Module bezeichnen will. Diese Vorgehensweise findet meine vollste Unterstützung! Folgendes musst du beachten. Alle Funktionen die vom Thema her zusammengehören in einem Modul zusammenfassen. Zu jedem Modul eine gleichnamige Header-Datei erstellen. In jedem Modul das Funktionen eines anderen Modul nutzt, ein #include "modulxxx.h" einfügen, sonst meckert der Compiler. Da du ja alles von Hand machst, und der Linker nicht wissen kann was nun zu tun ist, muss du eine Make-Datei (*.mak) erstellen. Die EXE-Datei erstellst du dann mit make <makefile> Allerdings spricht nichts dagegen die IDE zu verwenden. Alle oben beschriebenen manuellen Arbeiten werden dir abgenommen, und du kannst dich auf das Wesentliche (die Programmierung) konzentrieren... Zitieren
Money Making Machinist Geschrieben 9. März 2005 Autor Geschrieben 9. März 2005 Hi, so wie ich dich verstanden habe, willst du deinen (riesigen) Quellcode in mehrere Dateien aufteilen. Bingo! Okay, ich schau mal ob ich das so hinkrieg. Nur noch ne kleine Frage der Interesse halber: Ich hab mal gehört, das es sinnvoll sei, für jede Klasse einen eigenen Header zu schreiben. So eine Erklärung wie oben und ich wär glücklich. Allerdings, ich hab mir das mal mit dem makefile angeschaut, also ich find das sieht ziemlich komplex & kompliziert aus, was ich da bei gnu gesehen hab. Irre ich mich oder ist das schon so einen Sache für sich. Zitieren
Manfred.Becker Geschrieben 10. März 2005 Geschrieben 10. März 2005 Hi, also, wenn man über die IDE eine neue Klasse hinzufügt, wird für diese auch ein neues Modul (CPP-Datei + Header-Datei) angelegt. Der Dateiname entspricht (im Allgemeinen) dem Klassennamen ohne das führende C (z.B. Klasse CMyClass -> MyClass.cpp + MyClass.h). Das muss man aber nicht für ALLE Klassen machen, die im Projekt verwendet werden. Mal angenommen du willst ein Programm schreiben, das Logische Gatter simuliert. Da gibt's ja jede Menge unterschiedlicher Typen (AND,NAND,OR,NOR,NOT usw.). Damit ist klar, das du 'ne Basisklasse für die Logik brauchst (1.Modul). Auch eine Basisklasse für die Darstellung ist notwendig (2.Modul). Es wäre aber übertrieben, für die einzelnen Gattter, die von den Basisklassen abgeleitet werden, jeweils ein Modul zu verwenden. Die landen also alle in einem Modul (3.Modul). Aber das war nur EIN Beispiel. Immer dann wenn dein Quellcode zu unübersichtlich (zu gross) wird, solltest du dir Gedanken machen, diesen in meherer Module zu Teilen. Das mit den Makefiles must du dir anlesen. Ich kann dir nur soviel sagen, dass darin die Abhängigkeiten der einzelnen Module, die Anweisungen für den Compiler, und die Anweisungen für den Linker stehen. Das wird, je mehr Module Verwendung finden, umso aufwendiger. Wenn du den steinigen Weg gehen willst, tue das. Für einfache Konsolenanwendungen wirst du auch ganz gut damit klarkommen. Sobald du aber die erste Windows-Applikation schreibst, rate ich dir ausschliesslich die IDE zu verwenden. Zitieren
Money Making Machinist Geschrieben 11. März 2005 Autor Geschrieben 11. März 2005 Okay danke für diese ausführliche Antwort Manfred (.Becker, weiß nicht in wie fern ich dich dutzen darf). Ich werd mir das zu Herzen nehmen. Nochmals danke. Zitieren
Is it Real Geschrieben 29. November 2007 Geschrieben 29. November 2007 *hoch hol* Hallo :wink: Ich missbrauche den Thread mal für meine Frage: Ich bin dabei ein kleines Programm für die Nullstellenberechnung von Potenzfunktionen zu schreiben, die man so in der 10. Klasse vorgesetzt bekommt (also alles ganzzahlige Lösungen bis auf die von quadratischen Funktionen). Jetzt habe ich es schon einmal implementiert, wollt es optimieren und habe mir genauso wie der Threadstarter gedacht: Mach es übersichtlicher, pack die Funktionen für pq/hornerschema in einen Header. Leichter gesagt als getan, auch nach dem ich hier gelesen habe... Er möchte beim kompilieren beim besten Willen die Funktion, die ich zuvor in einem hornerschema.h deklariert und in hornerschema.cpp definiert habe, finden. potenzfunktionen.cpp:(.text+0x113): undefined reference to `getFaktoren(float*, int)' collect2: ld gab 1 als Ende-Status zurück meckert mein Compiler und ich kann mir einfach nicht erklären warum. Hier der Code der hornerschema.h: #ifndef GETFAKTOREN_H #define GETFAKTOREN_H void getFaktoren(float *pFaktorenArray, int anzahlFaktoren); #endif Hier hornerschema.cpp: #include<iostream> #include "hornerschema.h" void getFaktoren(float *pFaktorenArray, int anzahlFaktoren) { ..... } Und aufrufen tue ich die Funktion im Hauptprogramm einfach mit getFaktoren. Ich habe es mit hornerschema.getFaktoren und hornerschema::getFaktoren versucht, wie mein Lehrer es mir sagte, aber beides bringt mir "Hornerschema ist in diesem Gültigkeitsbereich nicht definiert". Von einem Makefile hat er mir garnichts erzählt - also muss das doch auch ohne gehen! *aufstampf* Die hornerschema.h und auch die hornerschema.cpp werden vom Compiler durchwackelt, immerhin habe ich für beide ein "no new line at end of file" bekommen. Ach ja: Ich verwende Kate, g++ und Ubuntu 7.04 Der eine oder andere Link wäre auch schon eine sehr große Hilfe. Ich freue mich schon auf eure Antworten MfG isitreal Zitieren
Guybrush Threepwood Geschrieben 29. November 2007 Geschrieben 29. November 2007 Wie baust du das ganze denn? Hast du da eine IDe mit Projektdatei oder läuft das über eine MakeFile? Zitieren
Is it Real Geschrieben 30. November 2007 Geschrieben 30. November 2007 Ich habe einen Texteditor, 3 Datein und einen Compiler. Ich kompiliere einfach die potenzfunktionen.cpp ("Hauptprogramm"). Hm - also nur 2 Möglichkeiten? IDE oder Makefile? *grummel* Kann mir jemand eine gute IDE für Linux empfehlen? Obwohl - das Makefile ist zwar ge****e, hat aber sicher mehr Stil ... ach, ich weiß nicht was ich machen solll Zitieren
Klotzkopp Geschrieben 30. November 2007 Geschrieben 30. November 2007 Ich habe einen Texteditor, 3 Datein und einen Compiler. Ich kompiliere einfach die potenzfunktionen.cpp ("Hauptprogramm").Die andere(n) cpp-Datei(en) musst du natürlich auch kompilieren. Und die dabei erzeugten Objektdateien kannst du dann zusammenlinken. Du musst weder ein Makefile noch eine IDE benutzen. Auf lange Sicht ist es aber mit Sicherheit einfacher. Zitieren
Is it Real Geschrieben 30. November 2007 Geschrieben 30. November 2007 Haha! Danke, das hat geklappt *verneig* einfach "g++ -o potenzfunktionen potenzfunktionen.cpp hornerschema.cpp" und schon gabs kein Gemecker. Jetzt versteh ich auch den Sinn von dem Makefile... Danke dir! Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.