Ich bin blöd = (



  • Ich gebe es zu.
    Ich programmiere eigentlich gut in C++, wann immer ichs brauch, aber eins habe ich nie begriffen.
    Header und Quelldateien und ihre magische Verbindung (ja, wir kommen auch noch zum c++ teil, nicht aufregen bitte).

    Also.
    Man nehme ein Programm mit einer Hauptfunktion und Klassen in jeweiligen Dateien.
    Nennen wir es mal
    programm.cpp -> main()
    programm.h -> include iostream, windowsx, windows, usw usf
    klasse1.h -> Defintion
    klasse1.cpp -> Methoden usw
    klasse2.h
    [...]

    Also.
    Wie zum Geier muss ich jetzt hier rumincluden.
    Ja, auf Arbeit arbeite ich mit php, und irgendwie verwirrt mich jetzt alles.
    programm.cpp included programm.h, das funktioniert ja.
    Aber was muss klasse1.cpp jetzt includen.
    Normalerweise würde ich jetzt klasse1.h includen. Okay, was kommt dann in klasse1.h, ein include auf programm.h ?

    Wie schlängelt sich der compiler denn da durch? Kompiliert er automatisch alle cpps die man ihm übergibt, oder muss ich hier alle headers im endeffekt im programm.h stehen haben.

    HILFE ICH HABE MICH VERWIRRT!

    Beispiele sind willkommen.

    Ohja, Frage 2:
    Was bringt mehr Performance - Klassen für alles (also 5 global Klassen in einem Projekt jeweils mit Funktionen gruppiert), oder normale Funktionen zusammengesammelt und Klassen/structs, wenn man es braucht.
    Der c++ Stil geht ja mehr dahin alles in Klassen zu haben....

    K, bitte helft mir, ich krieg hier beim kompilieren nur immer Headerkonventionsfehler oder son dreck, und ich weiß selbst nicht mehr was ich includen soll, außer eventuell einer Ladung Kaffee.

    k thx



  • header dateien werden immer in die cpp includet für welche sie bestimmt sind, also klassi1.cpp+klasse1.h und die header werden desweiteren noch an den stellen includet wo ein anderes programm die funktionen/klassen etc braucht.

    zur 2. frage:immer klassen benutzen wos sinnvoll ist, macht absolut keinen performance unterschied wenn mans kann 😉



  • 1. Der Compiler übersetzt jede .cpp-Datei, die ihm übergeben wird, einzeln. Ein #include macht dabei nur genau das, was der Name verspricht: Den Inhalt der Datei an dieser Stelle einfügen. Der Linker macht aus kompilierten Übersetzungseinheiten ein Programm.
    Warum sollte klasse1.h dann programm.h includen - und wozu überhaupt programm.h? Und der Dateiname der cpp- und h-Dateien kann auch unterschiedlich sein. Vielleicht solltest du dir die Schritte der Kompilierung mal genauer ansehen. Was auch immer du zum Programmieren verwendest, vermutlich zeigt es an, was gerade kompiliert und am Ende gelinkt wird.

    2. Der Trend geht in gutem C++ nicht dazu, stur Klassen zu verwenden (dafür gibt es andere Sprachen...), sondern dazu, das zu verwenden, was Sinn macht - auch wenn das natürlich Denkarbeit beim Design erzwingt. Die STL-Algorithmen sind z.B. aus gutem Grund alles globale Funktionen.



  • Ja, ich bin ein langsamer Lerner.

    Also nehmen wir mal mein konkretes Beispiel.
    Ich hab jetzt programm.h einfach genommen, ist ja im Grunde egal.
    Es existiert ebenfalls tools.h&cpp
    In cpp befindet sich eine Funktion, Proto natürlich in.h

    Ich will diese Funktion in meiner winmain benutzen, also include ich tools.h in meiner programm.h, programm.cpp included programm.h, und tools.cpp included tools.h, mit anderen Worten

    programm.cpp----|       |--- tools.cpp
             include|       |include
    programm.h------|------>|--- tools.h
                     include
    

    Und sollte ich jetzt z.B. eine dx3d.cpp und .h haben, die eine DirectX Klasse mit allen nötigen Funktionen beinhaltet, dann gehören DX libs und headers eben in dx3d.h, k?

    pheeeeft, bitte sagt mir ich habs kapiert.
    Ich dumme Nuss



  • K, vc++.net kriege ich einen C1010 Fehler, "unexpected eof while looking for precompiled header directive"

    Ich rate jetzt einfach mal, dass dies mit meinem drastischen Unverständnis zu tun hat.
    Ich sollte mich erschiessen, ja
    = D



  • Das ist eine VC spezifische Sache. In den Projekteinstellungen kannst Du unter "C/C++" -> "vorkompilierte Header" einstellen, ob diese verwendet werden sollen oder nicht. Damit kann man sich evtl. einige Compilzeit sparen. Die Datei heißt meistens Stdafx.h, wird von VC automatisch angelegt und enthält die meisten Includes auf Header die Du in Windows-Anwendungen benötigst. Dafür erwartet VC dann, dass Du in jeder *.cpp-Datei ein #include "StdAfx.h" machst.



  • skandal


Anmelden zum Antworten