Programmteile auslagern?



  • Hallo

    Nein nur die Deklaration (und von denen auch nur die wirklich extern benötigt werden) gehören in die Headerdatei. Die gesamte Implementation gehört in die cpp-Datei. Ausnahme nur bei Templates.

    bis bald
    akari



  • Aber ich muss dann doch gar nix deklarieren?
    funktioniert ja auch so? und hab nix in der header datei stehen



  • Hallo

    Nochmal von vorn. Du sollst immer nur Header includen, niemals Implementationsdateien. Daraus folgt das wenn nichts in einer Headerdatei deklariert wird, diese Headerdatei mitsamt Implementation mit großer Wahrscheinlichkeit überflüssig ist, kann ja nichts aus der Implementationsdatei von außen benutzt werden.

    // --- Main.cpp
    #include "a.h"
    
    // hier kann nur FuncA benutzt werden, nicht aber FuncB!
    
    // --- a.h
    
    int FuncA(); // Deklaration von FuncA
    
    // --- a.cpp
    
    int FuncA() // Implementation von FuncA
    {
    }
    
    int FuncB() // Implementation von FuncA
    {
    }
    

    bis bald
    akari



  • jetzt hab ichs verstanden ^^



  • Hab aber ein Problem, hab das jetzt alles so gemacht und in die Headerdatei von Unit1 includet... in den anderen Units include ich dann einfach die Unit1.h ein... müsste ja so funktionieren...

    jetzt habe ich eine funktion die heißt menue_einblenden

    Das steht in der header datei

    void menue_einblenden(TImage* hintergrundbild, TImage* starten,
    TImage* levelauswahl, TImage* optionen, TImage* hilfe, TImage* beenden,
    TImage* zurueck, TImage* highscore, TMemo* hilfetext)
    {
       starten->Visible=true; // Button starten sichtbar
       levelauswahl->Visible=true; // Button levelauswahl sichtbar
       optionen->Visible=true;   // Button optionen sichtbar
       highscore->Visible=true; // Button highscore sichtbar
       beenden->Visible=true; // Button beenden sichtbar
       hilfe->Visible=true;   // Button hilfe sichtbar
       hintergrundbild->Visible=true;  // hintergrundbild sichtbar
    
       // Der Zurück Button wird eingeblendet
       zurueck->Visible=false;
    
       // Memo Hilfetext wird ausgeblendet
       hilfetext->Visible=false;
    }
    

    und das in der Unit 3.

    menue_einblenden(carrace->hintergrundbild, carrace->starten, carrace->levelauswahl,carrace->optionen, carrace->hilfe,
     carrace->beenden, carrace->zurueck, carrace->highscore, carrace->hilfetext);
    

    Der bringt mir als fehler, aufruf der undefinierten Funktion 'menue_einblenden'
    aber ich habe doch die Unit1.h includet?



  • Hallo

    Das sieht nicht so aus als ob du verstanden hättest was wir geschrieben haben.

    Das steht in der header datei
    ...

    Die Implementation soll aber nicht in die Headerdatei!

    und das in der Unit 3.

    Da fehlt wahrscheinlich noch die include-Anweisung.

    bis bald
    akari



  • Ok, dann hab ichs wirklich nicht ganz verstanden...

    ich denke mal du meinst das so

    das kommt in die header datei

    void menue_einblenden(TImage* hintergrundbild, TImage* starten,
    TImage* levelauswahl, TImage* optionen, TImage* hilfe, TImage* beenden,
    TImage* zurueck, TImage* highscore, TMemo* hilfetext)
    

    und das in die cpp...

    menue_einblenden(carrace->hintergrundbild, carrace->starten, carrace->levelauswahl,carrace->optionen, carrace->hilfe,
     carrace->beenden, carrace->zurueck, carrace->highscore, carrace->hilfetext);
    

    aber wo weiß ich dann die sachen zu? 😕

    ... doch die Unit1.h ist includet...



  • Hallo

    Das kommt in die Headerdatei

    // Funktion mit Rückgabetyp und Parametern, da Deklaration auch mit abschießenden Semikolon
    void menue_einblenden(TImage* hintergrundbild, TImage* starten,
    TImage* levelauswahl, TImage* optionen, TImage* hilfe, TImage* beenden,
    TImage* zurueck, TImage* highscore, TMemo* hilfetext);
    

    Das kommt in die Implementation

    void menue_einblenden(TImage* hintergrundbild, TImage* starten,
    TImage* levelauswahl, TImage* optionen, TImage* hilfe, TImage* beenden,
    TImage* zurueck, TImage* highscore, TMemo* hilfetext)
    {
       starten->Visible=true; // Button starten sichtbar
       levelauswahl->Visible=true; // Button levelauswahl sichtbar
       optionen->Visible=true;   // Button optionen sichtbar
       highscore->Visible=true; // Button highscore sichtbar
       beenden->Visible=true; // Button beenden sichtbar
       hilfe->Visible=true;   // Button hilfe sichtbar
       hintergrundbild->Visible=true;  // hintergrundbild sichtbar
    
       // Der Zurück Button wird eingeblendet
       zurueck->Visible=false;
    
       // Memo Hilfetext wird ausgeblendet
       hilfetext->Visible=false;
    }
    

    bis bald
    akari



  • was genau meinst du mit Implementation...

    muss ich das untere in die cpp einfügen?

    hier rein?

    __fastcall Tcarrace::Tcarrace(TComponent* Owner)
       : TForm(Owner)
    

    oder kommt die oben drüber? also unter die include sachen?



  • Das kommt ganz unten in die cpp. Bitte arbeite erstmal ein Grundlagentutorial durch. z.Bsp. das hier. oder noch besser besorg dir ein gutes C++ Buch.
    http://tutorial.schornboeck.net/inhalt.htm



  • ich kann die grundlagen eigentlich, weiß nur nicht immer wie ich das in dem borland builder anwende, hab vorher mit dev cpp programiert...

    So hab das alles so gemacht wie ihrs gesagt habt...

    und jetzt bekomm ich lauter linke fehler...

    http://stetze-online.de/error.jpg



  • Hallo

    Also fangen wir mit dem Raten an : Du hast eine Klasse Tcarrace, und all die angekreideten Funktionen sind als Membermethoden dieser Klasse deklariert? Das ist eine Bedingung die du vielleicht mal erwähnen solltest! Denn dann must du bei den Implementation noch die Klasse angeben.
    Beispiel :

    // Hier Klassenname erforderlich
    void Tcarrace::menue_einblenden(TImage* hintergrundbild, TImage* starten,
    TImage* levelauswahl, TImage* optionen, TImage* hilfe, TImage* beenden,
    TImage* zurueck, TImage* highscore, TMemo* hilfetext)
    {
      ...
    }
    

    Das sind übrigends Grundlagen von OOP in C++ und hat nichts mit dem Builder zu tun.

    bis bald
    akari


Anmelden zum Antworten