Hilfe!



  • Kann mir mal jemand sagen, was daran falsch ist?

    #include <iostream>
    
    using namespace std;
    
    int main() {
    
        void const *NULL=0;
    
        struct PunktT;
        typedef PunktT *zpunkt;
        struct PunktT
        {
               float y,x;
        }
    
        zpunkt Anfang=NULL;
        zpunkt punktZgr;
    
        punktZgr = new PunktT;
    
        Anfang = punktZgr;
        punktZgr->x = 12.0;
        punktZgr->y = 18.3;
    
        punktZgr -> next = new punkt;
    
        punktZgr = punktZgr->next;
    
        Anfang->next->x=10.5;
        punktZgr->y=5.0;
    
        return 0;
    
    }
    


  • viel 😉



  • Was sagt denn dein Compiler dazu? (beim ersten Überfliegen sehe ich auf jeden Fall schon haufenweise nichtdefinierte Bezeichner (punkt, punktZgr->next) und sinnlose Definitionen wie NULL.

    (und es gibt auch ein paar Sachen, die besser außerhalb der main() aufgehoben wären ;))



  • willst ne liste mit punkten machen?



  • SchlitzInDaHaus schrieb:

    Kann mir mal jemand sagen, was daran falsch ist?

    #include <iostream>
    using namespace std;
    

    Damit kann ich noch leben, auch wenn du von iostreams im Programm nichts verwendest, und ich persönlich entweder die using-Direktive in die Funktion tun würde oder darauf verzichte, dies ist aber nur meine persönliche Meinung.

    int main() {
    
        void const *NULL=0;
    

    Hiervon würde ich eigentlich abraten, du wirst spätestens dann Probleme bekommen wenn du irgendwann mal eine Bibliothek einbindest die NULL als Makro definiert (#define NULL 0).

    struct PunktT;
        typedef PunktT *zpunkt;
        struct PunktT
        {
               float y,x;
        }
    

    Selten eine Vorwärtsdeklaration innerhalb eines Funktionsrumpfes gesehen. Ich würde mir hier vermutlich den Schreibaufwand erleichtern in dem ich die Struktur definiere und dann das Typedef mache (und beides aus der Funktion entfernen falls man es anderweitig verwenden will).

    zpunkt Anfang=NULL;
        zpunkt punktZgr;
    
        punktZgr = new PunktT;
    
        Anfang = punktZgr;
        punktZgr->x = 12.0;
        punktZgr->y = 18.3;
    

    Nun hast du zwei Zeiger auf das gleiche Objekt...

    punktZgr -> next = new punkt;
        punktZgr = punktZgr->next;
        Anfang->next->x=10.5;
        punktZgr->y=5.0;
    

    Was soll bitte next sein, in deiner Struktur gibt es kein next.

    return 0;
    
    }
    

    Wo bitte schön löschst du die mit new allokierten Daten wieder? (jedes per new erzeugte Objekt muss mit delete gelöscht werden).

    cu André



  • Vielen Dank erst einmal für die ausführliche Hilfe!
    Der Code ist aus meinem Vorlesungsskript übernommen. Ich wollte nur mal wissen, obn andere den auch so komisch finden, wie ich.

    #include <iostream>
    

    -> für spätere Ausgaben gedacht...

    void const *NULL=0;
    

    -> hier verstehe ich auch nicht so ganz. Erstens, wie asc schon sagte, weil ich auch dachte, dass das über Bibliotheken eingebunden wird. Und weil ich irgednwo gelesen habe, dass das für C++ unnötig sei.

    für das next muss ichmich entschuldigen. Das hab ich vergessen....

    Christoph



  • Wenn du in C++ schon unbedingt NULL schreiben musst, dann so:

    #define NULL 0
    

    Alles andere ist (in C++) Humbug.
    In C sieht die Sache anders aus, aber hier gehts ja wohl um C++.


Anmelden zum Antworten