Header virwarr- was wo einbinden



  • Hi,
    ich gehe hier gerade in einem Header-virwarr selber von mir geschaffen unter :o
    Problem ist:
    Ich habe 3Header und main.cpp die im wesentlichen auf dieselben Header zugreifen (windows.h;conio.h;iostream..)
    Frage: Wo sollte ich diese Header nun am besten einfügen? in alle anderen, eigenen Header?



  • Kurz: Dort, wo's gebraucht wird.



  • bei den headern, die nicht du selbst geschrieben hast, ist es egal, wie oft du die einbindest, die sollten normalerweise alle "include-guards" haben (oder wie auch immer die dinger "#ifndef#define#endif" heissen) deswegen kann man die imho in jeden deiner header auch reintun, schadet imho nicht... 🤡
    [kann mich aber auch irren]



  • Optimal waere, wenn du die Bibliotheksheader (windows.h;conio.h;iostream) nur in den cpp Dateien einbindest (sofern das ausreicht). Also beispielsweise A.h benoetigt intern iostream, also wird es in A.cpp eingebunden (ggf. Forward-Deklaration in der Headerdatei verwenden).

    Ansosten hast du eigentlich wenig Moeglichkeiten, der Compiler sagt dir schon Bescheid, wenn er etwas vermisst 🙂 (also in jedem Header das einbinden, was benoetigt wird zur Funktion).
    Wenn deine Headerdateien untereinander voneinander abhaengen musst du Sachen natuerlich nicht doppelt einbinden (auch wenn es kein Fehler ist, wegen Include-guards).

    Gruss,
    DeSoVoDaMu

    Edit: Gott bin ich lahm 😮



  • Oka, danke wusste net das die Header solche "guards" haben 🙂

    Aber mal was zur Sache Dateizugriff:
    Ich nutze fstream zum zugriff auf Dateien. Nun übergeben ich einer Funktion den Pointer auf einer Dateivariable - wie kann ich dann in diese Datei schreiben?
    Also beispiel:

    #include <fstream>
    ....
    int main()
    {
       std :: fstream test;
       MachWasMitTest(&test);
    }
    
    void MachWasMitTest(std :: fstream *test)
    {
      //Hier wird was getan...
      NocheineFunktionDieWasMitTestMacht(test); //test ist ja schon ein pointer...
    }
    void NocheineFunktionDieWasMitTestMacht(std :: fstream* test);
    {
      //Will nun hier was in test schreibe-aber wie?
      test << "HALLO DU DA";
    }
    


  • Nun, du musst erst eine Datei zuweisen (oeffnen) und dann kannst du auch hinein schreiben.
    Wenn du mit Pointern arbeitest musst du diesen vorher noch dereferenzieren (oder eine Referenz nutzen).

    #include <fstream>
    ....
    int main()
    {
       std :: fstream test;
       test.open("einedatei", std::ios::out); // neu
       MachWasMitTest(&test);
    }
    
    void MachWasMitTest(std :: fstream *test)
    {
      NocheineFunktionDieWasMitTestMacht(test);
    }
    void NocheineFunktionDieWasMitTestMacht(std :: fstream* test);
    {
      (*test) << "HALLO DU DA"; // geaendert
    }
    

    Wenn du nur schreiben willst kannst du auch auf ofstream umsteigen.
    Musst dir halt ueberlegen, wo Du die Datei oeffnen willst.
    Fehlerbehandlung ist jetzt noch keine drin.

    Gruss,
    DeSoVoDaMu



  • Ja mit öffnen uns so ist mir alles klar, wollte das nur nicht alles hier aufführen.
    Ich dachte auch ich müsste dort mit der Pointerarythmetik(oder wie das heißt..) arbeiten aber gehen tuts trotzdem nicht
    Fehlermeldung ist folgende (mit (*test))
    error: no match for 'operator>>' in '*test >> temp'
    Das Beispiel ist jetzt halt mit lesen, aber da wird sicherlich nicht groß was anders sein beim lesen und beim schreiben
    Fehlermeldung ohne (test) ist übrigsens diese:
    error: invalid operands of types `std::fstream
    ' and `char' to binary `operator>>'

    temp ist ne ganz normale char variable



  • Ok, ich weiss zwar nicht warum, aber nun gehts- musste den Header fstream nocheinmal einbinden...


Anmelden zum Antworten