struct in Header-Datei nach dem Compilieren ändern



  • Hallo miteinander,

    bin noch ein ziemlicher Neuling in C++ und habe zum Üben nen Stack geschrieben.
    Das Inhaltselement des Stacks ist die Struktur "entry", die in der Header-Datei definiert wird.

    struct entry {
    	struct entry * next;
    };
    
    bool empty();
    struct entry * push(struct entry * e);
    struct entry * pop();
    struct entry * peek();
    

    Jetzt meine Frage: Entstehen Fehler, wenn ich die Struktur nach dem Compilieren verändere; also wenn ich z.B. neue Strukturmitglieder hinzufüge?



  • Du kannst den Quellcode nach dem Übersetzen auch komplett löschen, das Programm läuft dann trotzdem noch.


  • Mod

    Crx schrieb:

    Hallo miteinander,

    bin noch ein ziemlicher Neuling in C++ und habe zum Üben nen Stack geschrieben.
    Das Inhaltselement des Stacks ist die Struktur "entry", die in der Header-Datei definiert wird.

    struct entry {
    	struct entry * next;
    };
    
    bool empty();
    struct entry * push(struct entry * e);
    struct entry * pop();
    struct entry * peek();
    

    Jetzt meine Frage: Entstehen Fehler, wenn ich die Struktur nach dem Compilieren verändere; also wenn ich z.B. neue Strukturmitglieder hinzufüge?

    Nein, es passiert überhaupt nichts, denn ohne neuen Compilier- und Linkvorgang kommen die Änderungen niemals in der Executable an.

    Machst du C oder C++? Die Schreibweise mit dem struct und das Design mit den freien Funktionen sind sehr C. Das bool ist eher C++ (oder modernes C), außerdem fragst du im C++-Forum. Der Unterschied ist wichtig!

    Dein Design hat derzeit mehrere große Schwächen:
    -Globale Variablen. Absolutes Tabu. Niemals, auch nicht zum Üben. Erst recht nicht zum Üben, schließlich geht es bei Übungen darum, dass man etwas richtig lernt.
    -Die Signaturen deiner Funktionen sind ungewöhnlich*. In Stacks speichert man Daten. Den Anwender hat nicht zu interessieren, wie diese intern gespeichert werden.

    Beide Designsschwächen hätten je nach Sprache (C/C++) andere Antworten. Auch daher ist es wichtig zu wissen, was du überhaupt machst.

    *: Das ist höflich ausgedrückt für "falsch".



  • SeppJ schrieb:

    Machst du C oder C++? Die Schreibweise mit dem struct und das Design mit den freien Funktionen sind sehr C. Das bool ist eher C++ (oder modernes C), außerdem fragst du im C++-Forum. Der Unterschied ist wichtig!

    C++, habe den Fehler gemacht und parallel zwei Bücher gelesen; eins das C und eins das C++ thematisiert. Deshalb komm ich manchmal durcheinander.

    SeppJ schrieb:

    Dein Design hat derzeit mehrere große Schwächen:
    -Globale Variablen. Absolutes Tabu. Niemals, auch nicht zum Üben. Erst recht nicht zum Üben, schließlich geht es bei Übungen darum, dass man etwas richtig lernt.
    -Die Signaturen deiner Funktionen sind ungewöhnlich*. In Stacks speichert man Daten. Den Anwender hat nicht zu interessieren, wie diese intern gespeichert werden.

    Beide Designsschwächen hätten je nach Sprache (C/C++) andere Antworten. Auch daher ist es wichtig zu wissen, was du überhaupt machst.

    *: Das ist höflich ausgedrückt für "falsch".

    Ich steige grade von Java zu C++ um und bin aber noch nicht zum OOP-Teil meines Buches gekommen. Da ich zu diesem Zeitpunkt noch keine Kenntnisse zur Verwendung von Interfaces in C++ habe, hab ich mir gedacht man könnte als Grundlage die stack.cpp compilieren also ne Object-Datei erzeugen und die dann in ein anderes Programm mit der Header-Datei einbinden. In der header-Datei kann man dann je nach Anwendung Strukturmitglieder hinzufügen.


  • Mod

    Crx schrieb:

    hab ich mir gedacht man könnte als Grundlage die stack.cpp compilieren also ne Object-Datei erzeugen und die dann in ein anderes Programm mit der Header-Datei einbinden. In der header-Datei kann man dann je nach Anwendung Strukturmitglieder hinzufügen.

    Nein, das wird nicht funktionieren. Ich weiß ehrlich gesagt nicht einmal, was genau passieren wird, aber es wird etwas schreckliches sein.

    Was du suchst sind Templates, aber das wird sicherlich noch eine Weile dauern, bis die in deinem Buch kommen. In C++ macht man damit allerlei Datenstrukturen, die dann beliebige Typen speichern können (und noch vieles mehr!). Die Standardbibliothek kommt daher auch schon mit einem ganzen Haufen solcher vorgefertigter Datenstrukturen, darunter auch ein Stack - nur so zu Info.

    Speicher zunächst einfach nur einen int. Mach es aber zu deiner eigenen Übung trotzdem sauber, in egal welchem Stil. Egal ob C oder C++ und welcher Datentyp, die beiden von mir angesprochenen Punkte gelten immer noch. Wenn du später Templates kennengelernt hast wirst du sehen, dass das Anpassen deines int-Stacks auf einen beliebigen Datentyp ziemlich einfach ist (im Prinzip schreibst du bloß template<typename Datatype> davor und ersetzt alle Vorkommen von int durch Datatype , aber das siehst du dann noch).



  • Danke erstmal für die Antworten 🙂

    Werde jetzt erstmal die nächsten Kapitel durchstöbern bevor ich an dem Punkt weitermache. Danke für die Hinweise auf meine Design-Schwächen, SeppJ! 😃


Log in to reply