Frage zu #include und Dateipfaden [SOLVED]
-
Ich habe in meinem Projektordner nun einzelene Unterordner angelegt, die jeweils eine .h Datei und eine .cpp Datei enthalten, nun brauche ich in einer der Headerdateien ein #inlude das auf einen anderen Ordner in meinem Projekt zeigt.
Das ganze lässt sich in etwa so versinbildlichen.
Main Class 1 Ordner Class 2 Ordner Class 3 OrdnerNun brauche ich quasi aus Class 3 Ordner einen include der in den Class 2 Ordner zeigt. Ich hab es schon mit
#include "../Class2/header.h"probiert aber das scheint nicht richtig zu sein. Im Netz hab ich bisher ausser lauter SVN Verzeichnissen nicht viel dazu gefunden. Hat hier vieleicht jemand eine Lösung?
Vielen Dank im woraus.
-
* Warum denn gleich für jede Klasse ein eigenes Verzeichnis?
* Was ist die genaue, komplette Fehlermeldung (bitte Copy-Paste!)
-
arghonaut schrieb:
* Warum denn gleich für jede Klasse ein eigenes Verzeichnis
Jede dieser Klassen ist recht umfangreich (10-20k zeilen) will mein projekt halt irgendwie ein bisschen aufräumen und wenn ich eine klasse ändern will einfach halt die passende Datei öffnen. Dazu kommt der Fakt das ich mir so jede Mnge Compilerzeit spare.
arghonaut schrieb:
* Was ist die genaue, komplette Fehlermeldung (bitte Copy-Paste!)
In Fakt einfach ein File not found, aber hab es mittlerweile gelöst indem ich meiner IDE die Verzeichnisse hinzugefügt habe. Ist zwar nur suboptimal aber da das Projekt eh nur auf meiner Maschine compiliert wird ausreichend.
-
Videonauth schrieb:
Jede dieser Klassen ist recht umfangreich (10-20k zeilen)
Ich behaupte mal dein Design ist ganz hart verkackt.
Videonauth schrieb:
Dazu kommt der Fakt das ich mir so jede Mnge Compilerzeit spare.
Ordner machen doch den Kompiliervorgang nicht schneller?
-
cooky451 schrieb:
Videonauth schrieb:
Jede dieser Klassen ist recht umfangreich (10-20k zeilen)
Ich behaupte mal dein Design ist ganz hart verkackt.
Videonauth schrieb:
Dazu kommt der Fakt das ich mir so jede Mnge Compilerzeit spare.
Ordner machen doch den Kompiliervorgang nicht schneller?
Naja ganz hart verkackt war das programm als ich es unter Java geschrieben habe, dort ist der Source ca 90 MB gross und die Klassen hat noch viel viel mehr Zeilen, inline Funktionen und so weiter, ich arbeite derzeit daran das ganze in C++ neu zu schreiben.
Die einzelnen Ordner nicht aber jeder Ordner enthält eine .h und eine .cpp was dann darin resultiert das die Dateien nicht mehr jedesmal neu compiliert werden, sofern sie nicht verändert wurden.
-
Ja, aber was bemängelt wurde waren die Ordner, nicht die Trennung in .cpp und .h(pp) Dateien.
Aber um mal auf die Klassengröße zurückzukommen: Könntest du mal kurz beschreiben was die einzelnen Klassen machen, und wie sie zusammenarbeiten? Ich kann mir kaum vorstellen, dass eine Klasse mit 20k Zeilen Code ansatzweise sinnvoll sein soll.
-
Das ganze ist eine Adressen/Lager/Warenhaltungs software die ich mal selber entwickelt habe, angefangen hat das mal als kleine Adressdatenbank, dann kamen Wareneingang und Ausgang und Rechnungen und Bankhaltung und und und dazu, dann Warenparameter und so weiter so haben sich diese Klassen mit der Zeit um jede Menge Memberfunktionen erweitert, mittlerweile ist das Ganze so weit angewachsen das es kaum noch zu überblicken ist, ausser das Grundkonzept.
Nun bin ich drauf und dran das Ganze nochmal zu überarbeiten und zu vereinfachen ohne funktionen zu verlieren. Mein erstes neu build hat nur noch ca 50% der Java Source Grösse und die geschwindigkeit hat sich um ein vielfaches verbessert.
Dann kommt noch der Punkt das das ganze neue Programm auf die alten Datenbanken zugreifen können muss. Klar wäre da noch die Lösung über SAP anzugehen aber ehrlich gesagt scheue ich mich immernoch diese hohen schulungkosten reinzustecken.
C++ zu lernen und dann mein programm zu konvertieren ist noch die Günstigere Variante.Die herangehensweise in Ordnern hab ich eigendlich aus dem Grund eingeführt um mich nicht zu verhaspeln beim neu schreiben.
-
Mal ein paar Tipps:
- Solange du nicht in unabhängige Module aufteilst (utility, network, gui, ..) pack erst mal alles in einen Ordner.
- Mach dir eigene Klassen für Dinge wie Adressen, Rechnungen, Waren, ... etc. Kapsel die Funktionalität dieser Klassen einzeln, sodass sie von außen leicht zu verwenden sind. Dann bau deine Funktionen auf diesen Klassen auf. Dadurch wird das alles viel Übersichtlicher und du hast auch keine 20k Zeilen mehr in einer Klasse.
-
Sowas in der Art probier ich im moment hehehehe, ziemlich hartes einsteiger Prrojekt für C++, im Moment programmiere ich seit ca. 4 wochen in C++, und seit ca 2 Wochen an diesem Projekt.
Ich muss sagen das es etwas wirklich ganz anderes ist als Java oder die anderen Sprachen die ich in meinem Leben gelernt habe. Auf der anderen Seite muss ich sagen das mich diese Projekt durch eine echt harte Lernkurve schickt.
-
Zeig mal irgend einen Header her, ich will das sehen.
-
Videonauth schrieb:
Sowas in der Art probier ich im moment hehehehe, ziemlich hartes einsteiger Prrojekt für C++, im Moment programmiere ich seit ca. 4 wochen in C++, und seit ca 2 Wochen an diesem Projekt.
Ist das nicht etwas übertrieben, nach 2 Wochen C++ ein Zehntausende Zeilen langes Projekt zu beginnen? Das kann doch gar nicht funktionieren!
@PI: Er soll das lieber woanders Posten. Und überhaupt, wie willst du da noch was finden, so ganz lässig mit 20000 Zeilen?

-
Naja so ganz easy ist das mit dem finden nicht, aber auf der anderen Seite ist diese Programwurst ja auch auf meinem Mist gewachsen (über die letzten 5 Jahre) und zu meinem Glück einigermassen gut mit Kommentaren versehen.
Bin ja nebenbei kein kopletter programmier Neuling sonst hätte ich mich bestimmt noch nicht daran gewagt. Mir wurde ganz einfch langsam das Gefrickel an dem Java Code zuviel und nun versuche ich halt nen Start Over mit dem Wissen um die struktur der Datenbank und dem wissen was ich in den letzten 5 Jahren beim erstellen des programms gesammelt habe, nur halt diesmal in einer anderen Programmiersprache.
-
Videonauth schrieb:
und zu meinem Glück einigermassen gut mit Kommentaren versehen.
Nur schlechter Code braucht Kommentare, um verstanden zu werden.
-
Solange Code funktioniert ist er nicht schlecht, es gibt eher nur schlechten schreibstyle oder guten schreibstyle und da entwickelt jeder sowiso über kurz oder lang eigene Präferenzen, und Kommentare an einem source der so lang ist sind in meiner Meinung was gutes.
-
Dass nur schlechter Code Kommentare brauche, um verstanden zu werden, kann nur jemand sagen, der es noch nie mit komplizierten Sachverhalten zu tun hatte. Nicht alle Probleme, in die man bei einer Implementation läuft, sind (selbst für Eingeweihte) sofort offensichtlich, und es ist dann sehr hilfreich, wenn der Code gut kommentiert ist. Wenn ich für komplexe Formeln Grenzwertbetrachtungen an drei möglichen Singularitäten mache, schreibe ich selbstverständlich daneben, was das alles bedeutet; ich bin ja nicht wahnsinnig.
Was "solange Code funktioniert ist er nicht schlecht" angeht, das meinst du doch wohl hoffentlich nicht ernst, Videonauth. Selbst wenn man annimmt, dass "funktioniert" im Sinne von "wohldefiniert" gemeint ist statt im Sinne von "läuft bei mir", wird einen eine Weile auf der Website des IOCCC eines besseren belehren.
-
Videonauth schrieb:
es gibt eher nur schlechten schreibstyle oder guten schreibstyle
Das dachte ich auch,
but then I got an arrow to the kneeaber dann habe ich von Klassen mit 20k Zeilen gehört.
-
Fus Doh Rah hilft immer ...
Ne mal im ernst ich hatte schon einen Grund das neu machen zu wollen, durch die vielen nachträglichen änderungen im Code ist das ganze inzwischen wenig performant und unübersichtlich. Das Manko gilt es nun zu beseitigen, aber der Code läuft und das im Geschäftsbetrieb seit 5 Jahren und wurde immer mal ad hoc um ein paar Funktionen, Abfragen usw. erweitert je nach bedarf.
-
@seldon: Das ist was anderes. Aber ein Code, der irgendwelche Daten in eine Datenbank schubst, ist i.d.R. von der Materie her nicht so kompliziert.
-
Unterschätz das nicht - so was ist geistig im Zweifel nicht so anspruchsvoll wie höhere Mathematik, aber komplex können solche Systeme durchaus werden. Insbesondere kann es da viele Stellen geben, an denen man die Sache so oder so machen kann, und da ist dann ein Kommentar dass und warum man es so und nicht so gemacht hat, eine sehr gute Sache. Oder wenn nicht sofort ersichtlich ist, dass es überhaupt etwas zu bedenken gab - dann ist eine Notiz, dass man bei der Weiterentwicklung auf etwas achten sollte, unbezahlbar.
Das sind Dinge, auf die man ab einer gewissen (ziemlich geringen) Programmgröße unabhängig vom Anspruch der Materie stößt, und deshalb halte ich diese "Kommentare sind was für Idioten"-Einstellung für völlig verfehlt. Man muss und sollte nicht zu jedem kleinen Einzelschritt etwas schreiben, aber wo es etwas zu bemerken gibt, schreib es in einen Kommentar daneben. Wenn du zwei Jahre später noch mal auf den selben Code kuckst, wirst du dir selbst dafür danken.