Projekte mit mehreren Klassen, wohin mit den #includes?



  • UnicodeString? std::string kann auch unicode, macht keinen Sinn, das Rad neuzuerfinden.

    Wie ich gesagt habe, je weniger du in Headern inkludierst, desto besser. Wenn dir eine Vorwärtsdeklaration reicht, dann benutz die und inkludiere erst, wenn du wirklich die Definition brauchst (in der cpp dann).



  • wenn ich bei

    Edit1->Text
    

    abwarte, wird gezeigt, dass die Variable ein UnicodeString ist. Ich bin mir nicht mehr sicher, ob es mit nem std::string net funktioniert hat, aber ich dachte, das ist eine Klasse vom C++ Builder. 😉

    Mir ist es fast peinlich zu fragen aber was bezeichnet man als Vorwärtsdeklaration? 😕



  • Achso, mir war nicht klar, dass VCL hier ein eigenes Süppchen kocht. Ich dachte, das wär eine Klasse von dir. Macht für mich zwar trotzdem wenig Sinn, aber gut, wenn die das so machen...

    Bei der Vorwärtsdeklaration sagst du im Prinzip, dass es die Klasse gibt und die Deklaration später kommt, damit der Compiler zufrieden ist. Also wenn du z.B. eine Methodendeklaration angibst, die einen als Parameter einen Zeiger auf eine Klasse bekommt, brauchst du die Definition dieser Klasse noch nicht, deswegen würde hier eine Vortwärtsdeklaration reichen. z.B. so:

    class Klasse;
    void foo(Klasse* cls);
    

    Aber das sind alles absolute Grundlagen, ich würde dir empfehlen, ein richtiges C++ Buch zu nehmen und erstmal richtig durchzuarbeiten. Als ich mit C++ angefangen habe, hab ich auch den Fehler gemacht, gleich mit einer IDE und einem GUI System anzufangen, nur wars bei mir damals VS und MFC. Das war alles eher kontraproduktiv, ich hab vieles nicht verstanden, hab mich über vieles geärgert und bin ständig auf die Nase gefallen. C++ ist halt eine Sprache, mit der man sich intensiv beschäftigen sollte. Sowas wie MFC oder VCL ist am Anfang eigentlich nur schädlich.



  • naja, ein ordentliches C++-Buch habe ich schon aber ich komme nie dazu, mal ordentliche c++-projekte zu machen. (Wegen dem Studium bis jetzt immer mit c oder java beschäftigt gewesen)

    Der Begriff Vorwärtsdeklaration ist mir schon bekannt gewesen aber an der eigentlichen Bedeutung bin ich bis jetzt wohl durch Zufälle vorbei geschlittert. 😉 Najut, jetzt weiß ich auf jeden Fall weiter, danke für deine Hilfe. 🙂

    Btw: Ich hab im Gymnasium mit Delphi gearbeitet, mir parallel C++ beigebracht (Grundlagen, während des Abis, nicht soviel Zeit...) und erst später mitbekommen, dass es den C++-Builder gibt. (Kenne halt schon die Grundlagen der GUI-IDE) Versaut wird mein C++-Wissen dadurch sicher nicht. 🙂

    (Versaut wirds durch Java, irrks)



  • C++ ist nicht Delphi... Ich hab auch mit Delphi angefangen und bin auch sehr lange dabei geblieben, obwohl ich mir nebenbei alle möglichen Sprachen angeschaut habe. C++ hat mir damals nicht zugesagt, weder mit VS/MFC noch mit C++Builder und VCL (kannte ich damals schon, aber nur sehr oberflächlich). Und zwar hat es mir hauptsächlich nicht zugesagt, weil ich die Sprache nicht verstanden habe. Sowas wie VCL usw. versperrt den Blick auf die Sprache, du lernst hauptsächlich paar Bibliothken, ohne die Grundlagen zu verstehen und wirst ständig auf die Nase fallen.
    Ich mag die VCL im Zusammenhang mit C++ nicht. Ich finde das Konstrukt irgendwie komisch und nicht C++-Like und dieses UnicodeString bestätigt meine Meinung. Außerdem weiß ich echt nicht, wer den C++ Builder heute noch einsetzt. Ich habe mit dem Teil überhaupt keine Erfahrung, aber so viel ich weiß, wurde es schon früher nur belächelt und nie ernsthaft eingesetzt, und heute eigentlich erst recht.



  • Welche GUI-IDE ist denn ansonsten so zu empfehlen?

    Klar ist Delphi nicht = C++ aber wenn man so oder so am Anfang des Werdeganges ist, spart man sich so eventuell das lernen einer kompletten GUI-IDE. Ich kenne halt die Elemente von VCL schon und kann mich so auf C++ konzentrieren.

    Vorher habe ich es kurz mit Qt versucht aber ich bin jedes mal voll gegen die Wand gefahren weil ich alle 5 Minuten dinge googlen musste, deren Funktionsweise ich beim C++-Builder schon kenne. 🙂



  • Bin mir grad nicht sicher, was du mit "GUI-IDE" meinst. Welche IDE du verwendest, ist ziemlich egal (außer vielleicht C++ Builder, wenn er sich nicht ohne VCL verwenden lässt).
    Du solltest halt erstmal keine GUI Projekte schreiben. Konzentriere dich allein auf die Sprache. Erst wenn du die Sprache ausreichend verstanden hast (mag hört oft, dass man für C++ ein halbes Jahr braucht), kannst du mit GUI Projekten anfangen.



  • Wie gesagt, C++ programmiere ich schon eine weile. Hab schon diverse Konsolen-Programme geschrieben und will jetzt auch kleinere GUI-Projekte starten. (Dabei soll es nicht wirklich um die GUI gehen, ein RayTracer hat ja auch nicht viel damit zutun.)

    GUI-IDE, Irgendeine Entwickler-Umgebung bzw. C++-Libary, die GUIs unterstützt und möglichst so professionell ist, das man nicht andauernd wechseln muss.



  • Ich hatte jetzt aber nicht den Eindruck, dass du schon ausreichend gut C++ kannst 😉 Die Frage nach Vorwärtsdeklarationen, Includes, "main", eine Vektorklasse die irgendwelche GUI-Eingaben kennen sollte... Es fehlt anscheinend noch sehr viel an Verständnis. Das lernt man am besten mit guten Grundlagenbüchern.
    Man kann es natürlich auch über den Learning-By-Doing Ansatz probieren. So hab ich das früher mit Delphi gemacht. Auch viel programmiert, ohne es genau zu verstehen. Hab dann erst später verstanden, was ich eigentlich genau gemacht habe. In C++ dann genau so. Aber so hab ich Jahre gebraucht, um C++ halbwegs zu verstehen, wenn man das richtig angeht, geht es schneller.



  • Na dann kamen meine Fragen wohl schlimm an. 🙂

    Ich bin halt nicht so fit mit den includes bei solchen vorangelegten Projekten und dem aufteil von Deklaration und Definition. Die Vektorklasse sollte nur ne einfache Möglichkeit der Ausgabe während der Entwicklung haben und ich dachte, der C++-Builder hat da seine eigene klassen.

    Aber mal zurück zur klasse, was für Libaries benutzt man am besten für GUIs? (es geht letztendlich wirklich nur um ein Fenster, auf dem ich in ruhe Pixel zeichnen kann um meinen rayTracer zu programmieren. 🙂 )



  • Es gibt noch viel mehr Sachen in C++, die man kennen sollte. Ich sprech das aus Erfahrung 😉 Ich hatte auch schon recht viel Erfahrung in Delphi, C# und Java und bin trotzdem nicht mit C++ zurechtgekommen. Es gibt einfach sehr viele Sachen, die man aus anderen Sprachen nicht gewohnt ist. Und dann gibts noch viele Idiome usw., die man kennen sollte. Ich vermute einfach, wenn du schon Probleme mit includes und ähnlichem hast, dass es noch viel mehr in C++ gibt, was du noch nicht kennst. Ich war auch selbst mal in der Phase, wo ich keine Ahnung hatte, aber dachte, ich wüsste genug, um an Projekten mitzuarbeiten.

    Was GUI Bibliotheken angeht. Ich persönlich kenne mich am besten mit Qt aus, das benutzen wir in der Arbeit. GTK+ (bzw. gtkmm in C++) und wxWidgets werden ähnlich gut sein, hab damit aber nicht sehr viel gemacht. Das sind auch die Frameworks, die man in richtigen Projekten am ehesten vorfindet. MFC ist völlig veraltet, findet man leider aber immer noch recht häuftig. C++ Builder und VCL ist glaube ich nur eine Spielerei, kann mir jetzt nicht vorstellen, dass es tatsächlich professionell eingesetzt wird, hab sowas noch nie gehört.



  • Na an Projekten will ich nicht mitarbeiten, dass will ich niemanden antun. 😉 Aber ich muss halt irgendwo üben und da wir nächstes Semester C++ haben, bin ich zuversichtlich, dass ich spätestens dann noch nen ordentlichen Schub bekommen möchte. 😉

    Ich bin ja keiner von denen, die kaum C++ können aber schon ihr erstes 2D-Game programmieren müssen. 😉



  • ruhig_brauner schrieb:

    Aber ich muss halt irgendwo üben und da wir nächstes Semester C++ haben, bin ich zuversichtlich, dass ich spätestens dann noch nen ordentlichen Schub bekommen möchte. 😉

    Will dich nicht enttäuschen, bin da aber auch etwas skeptisch 😉 An Hochschulen wird sehr oft ziemlich schlechtes C++ gelehrt.



  • Na dann muss ich wohl doch nochmal den dicken Schmöker raus hohlen. 🙂



  • Muss gar nicht so dick sein... Was mir z.B. am Anfang weitergeholfen hat, waren die Bücher von Scott Meyers, und die sind nicht dick.



  • Bei meinen Recherchen kamen zum Schluss meist Bücher zwischen 500 und 1000 seiten raus und an sich ist 500 ja schon ausreichend dick. 🙂



  • Ich hätte doch nochmal ne Frage. Inzwischen klappt das mit dem Deklarieren und Definieren ganz gut aber wenn ich compile erklärt der mir irgendetwas von "Zeile 500000 von Zeile 500000" (weiß nicht, woher die Zeilen kommen) und das Compilieren dauert knapp ne Minute und er hängt sich zwischenzeitlich auf, obwohl ich bis jetzt kaum was getippt habe. Ist das normal?

    Habe folgendes eingebunden:

    in der main.h habe ich Vector3.h eingebunden
    in der Vector3.h steht die Deklaration mit vielleicht 5 Funktionen
    in der Vector3.cpp steht die Definition der Funktionen und es wird Vector3.h inkludiert

    Gibts da irgendwo n Problem?



  • ...



  • Mhhh, doch. 🙂 Ich hab es nochmal mit nem alten Projekt versucht, was nen ähnlichen Umfang hat. Da verschwindet das Build-Femster schneller aber das Programm braucht dann trotzdem ewig, um zu starten.

    Viel mehr habe ich bis jetzt wirklich nicht mit dem Projekt gemacht. Ich gucke gleich nochmal, ob ein Systemneustart vielleicht geholfen hat. (Da merkt man mal, wie verzweifelt ich schon bin...)

    Ich kann dir den ganzen Quelltext schicken, aber selber erstellt habe ich wirklich nicht viel. Trotzdem machen?

    Edit: Systemneustart hat geholfen. Ich sollte wirklich mal mein System neu aufsetzen. o.o Und sowas schimpft sich Informatik-Student. 🙂



  • ruhig_brauner schrieb:

    Na an Projekten will ich nicht mitarbeiten, dass will ich niemanden antun. 😉 Aber ich muss halt irgendwo üben und da wir nächstes Semester C++ haben, bin ich zuversichtlich, dass ich spätestens dann noch nen ordentlichen Schub bekommen möchte. 😉

    Dann lass GUI und ins besondere VCL bitte erst einmal sein. Du schießt dir mit beiden in das eigene Bein. Zudem wird es dir auch in der Berufspraxis nicht viel helfen:

    1. Es gibt nicht _die_ C++ GUI, und die VCL ist auch nicht unbedingt die verbreitetste (auch wenn es in einigen Firmen, wie meiner derzeitigen, tatsächlich eingesetzt wird). Und um es noch besser zu machen: Die GUI-Bibliotheken unterscheiden sich teilweise so extrem, das es nur eine kleine Schnittmenge gibt.

    2. Die VCL ist für das Lernen von C++ sehr kontraproduktiv, du lernst maximal die VCL, nicht aber C++ kennen.


Anmelden zum Antworten