Warum include in .h und .cpp ?



  • Peinlich isses mir schon... jetzt muss ich aber endlich mal fragen und dem Unwissen ein Ende setzen - das wird ja sonst nur noch peinlicher 🙂

    Wenn ich über "Unit-Header einschliessen" ein Unit einbinde schreibt der BCB mir z.B. #include "CopyThread.h" in das cpp-file meiner Form1. Will ich daraufhin im Header von Form1 CopyThread* MyCopyThread deklarieren erkennt er das nicht als Typ. Erst wenn ich auch im Header-File CopyThread.h include klappt es.

    Ok, es klappt, aber ich frage mich schon warum/ob ich das jetzt doppelt includen muss und falls ja, warum der BCB das dann nicht direkt mit macht.

    Kann mir das jemand erklären, bzw, was mach ich falsch ?

    mfG

    robi1806



  • Wenn man ein Include in die cpp schreibt gilt es nur für diese datei, wenn man es in den header schreibt gilt es für alle dateien die diese header-datei einbinden, also z.B. die cpp die zum header gehört.

    Deswegen kannste wenn du das include in die header schreibts das aus der cpp löschen.

    Ein include in der header-datei ist aber nur notwendig wenn du typen daraus in der header deklarieren willst, ansonsten würde ichs in die cpp packen, da sonst automatisch jede datei die diese header-datei einbindet auch alle includes der header-datei mit einbindet.



  • Einleuchtende Erklärung, vielen Dank.



  • robi1806 schrieb:

    ...Wenn ich über "Unit-Header einschliessen" ein Unit einbinde schreibt der BCB mir z.B. #include "CopyThread.h" in das cpp-file meiner Form1. Will ich daraufhin im Header von Form1 CopyThread* MyCopyThread deklarieren erkennt er das nicht als Typ. Erst wenn ich auch im Header-File CopyThread.h include klappt es.
    robi1806

    Wenn du über Unit-Header einschliessen includierst steht das normalerweise unterhalb von #include Unit1.h
    Deshalb kann er in der Header den Typ nicht erkennen. Verschieb doch mal dein #include "CopyThread.h" nach oberhalb. Dann sollte es funktionieren.

    Viel Erfolg....


Log in to reply