Verwirrung - #include "[...].cpp" oder #include "[...].h"



  • Hi,
    ich hab ne Klasse geschrieben. Dazu hab ich unter Neu eine neue Unit erstellt und die dann abgespeichert! In die *.h Datei hab ich dann meine Klassendaklaration und die Funktionsprototypen reingeschrieben! In die dazugehörige *.cpp Datei hab ich dann die Funktionen selber reingeschrieben!

    So jetzt mein Problem: Wenn ich jetzt ein neues Projekt erstelle und so wie der Builder das bei seinen Header-Dateien auch macht, die *.h meinrer Klasse einbinde, findet er die Funktionen die nicht inline definiert sind nicht! (Linker ERROR) Wenn ich aber die .cpp Datei einbinde klappt es! Ist das so richtig oder hab ich irgend wo anders was falsch gemacht?
    Achso das selbe passiert auch wenn ich Funktionen ohne Klasse in eine Unit schreibe! (
    .h - Prototypen und *.cpp - Definitionen)

    Irgendwie sieht das blöd aus wenn ich da ne *.cpp-Datei einbinde. Hab ich glaubich auch noch nirgens gesehen. Hab schon in mehreren Buchern nachgeschlagen! Die haben immer die *.h eingebunden, aber das klappt bei mir ja nicht!

    Bitte helfen! Danke

    Alexander Sulfrian



  • HAst Du die cpp Datei Deinem Projekt hinzugefügt ?



  • cpp dateien werden nicht included sondern immer dem projekt hinzugefügt



  • Hi,
    ja eingentlich will ich ja garnicht die *.cpp-Datein includen, sondern die *.h (wie das der BCB von sich aus bein anderern Headerdateien ja auch macht) includen! Aber dann findet er wie gesegt meine Funktionsköper nicht mehr?!

    Danke

    Alexander Sulfrian



  • bei den Includes, die der Builder macht, klappt das deswegen, weil es sich um VCL-Includes handelt. Damit weiß er automatisch richtig umzugehen. Außerdem werden die "VCL-CPP's" automatisch in Dein Programm hinzugelinkt oder der Aufruf der .DLL erzeugt (je nach Compilereinstellung).

    Wenn Du nur Include hinzufügst, die aber Code (also eine .cpp benötigen), dann mußt Du die .cpp in's Projekt einbinden. Woher soll der Compiler sonst wissen, welche .cpp er dazunehmen soll? Hellsehen kann der nämlich nicht...

    Ein alleiniger .h-include reicht dann aus, wenn Du darin nur Definitionen hast (z.B. Strukturen oder Konstanten), die keine Konstruktoren/Destruktoren bzw. Methoden benötigen.

    Falls Du das nicht einsehen willst, dann binde die fraglichen .cpp's in Dein Projekt mit ein und alles wird gut...


Anmelden zum Antworten