Struct in Klasse umbauen



  • Hallo liebe Community,

    ich möchte einen Struct in eine Klasse umwandeln.

    vector<seg*> output;  // Array of output segments.
    struct seg {
    	point start, end;
    	bool done;
    
    	seg(point p)
    	: start(p), end(0,0), done(false)
    	{ output.push_back(this); }
    
    	// Set the end point and mark as "done."
    	void finish(point p) { if (done) return; end = p; done = true; }
    };
    

    zu

    class seg {
    public:
    	point start, end;
    	bool done;
    
    	seg(point p)
    	: start(p), end(0,0), done(false)
    	{ output.push_back(this); }
    
    	// Set the end point and mark as "done."
    	void finish(point p) { if (done) return; end = p; done = true; }
    };
    

    Bei meinem Ansatz, zeigt der Compiler aber zwei Fehler.

    in Zeile 7: member initializer expression list treated as compound expression
    in Zeile 8: 'output' was not declared in this scope

    Ich hoffe ihr könnt meine Gedanken folgen. Ich fange gerade erst an C++ zu lernen.

    Danke und Gruss
    Christian



  • output ist nicht deklariert.



  • Der Output ist in der Klasse, die die Seg Klasse benutzt. In der Structvariante war das ja noch egal, aber jetzt weiß ich nicht wie ich die Variable aus der höheren Klasse an die Klasse übergebe.



  • Die Segment-Klasse (warum nur "seg"?) sollte von output gar nichts wissen und dort eingefügt werden, wo sie erstellt wird.

    Desweiteren gibt es keinen Unterschied zwischen struct und class außer der Default-Sichtbarkeit.



  • seg(point p)
    : start(p), end(0,0), done(false)
    

    Könnt ihr mir vielleicht hier erklären, warum das nicht funktioniert ?
    Fehler in Zeile 2:

    member initializer expression list treated as compound expression



  • Zeig uns mal ein komplettes, aber dennoch möglichst minimales Codebeispiel, das den Fehler immer noch repräsentiert.



  • Ich möchte gern den code in eine system von klassen packen und in opframeworks nutzen. das problem ist aber, wenn ich das mit structs mache openframework damit probleme hat. die klassen variante würde ich auch gern bevorugen um mehrer instanzen des voronois generieren zu können.

    Hier der Code:
    http://www.cs.hmc.edu/~mbrubeck/voronoi.html


  • Mod

    foofad schrieb:

    seg(point p)
    : start(p), end(0,0), done(false)
    

    Könnt ihr mir vielleicht hier erklären, warum das nicht funktioniert ?
    Fehler in Zeile 2:

    member initializer expression list treated as compound expression

    Das sollte mit dem Code den du gezeigt hast nicht passieren. Ist das wirklich 1:1 so wie du geschrieben hast? Die Fehlermeldung deutet nämlich darauf hin, dass end eine Referenz wäre, was es in deinem Code aber nicht ist.

    foofad schrieb:

    Ich möchte gern den code in eine system von klassen packen und in opframeworks nutzen. das problem ist aber, wenn ich das mit structs mache openframework damit probleme hat. die klassen variante würde ich auch gern bevorugen um mehrer instanzen des voronois generieren zu können.

    Häh? 😕
    Structs und Klassen sind in C++ das gleiche! Etwas das mit Klassen zurechtkommt, muss auch mit Structs umgehen können und umgekehrt. Das kann man nicht einmal böswillig verhindern, wenn man es so wollte (außer vielleicht durch etwas wie #define struct int , was aber kein gültiges C++ wäre).

    Deine Probleme liegen offenbar woanders. Die angesprochenen Compilerwarnungen deuten darauf hin, denn diese haben an sich nichts mit deiner Umstellung von Struct auf Class zu tun.



  • Oki wenn ich einfach alles beim alte belassen und aus den Structs keine Klassen mache dann bekomme ich nur einen Fehler, den ich leider nicht lösen kann.

    die typedef von point stört wohl die ofPointer Klasse von openframework.

    typedef pair<double, double> point;
    #define x first
    #define y second
    

    Fehler:
    testApp.cpp:32: error: 'class ofPoint' has no member named 'first'

    Die ofPoint Klasse benutzt auch das x und y und nun weiss ich nicht wie ich bei da glücklich machen kann.



  • foofad schrieb:

    typedef pair<double, double> point;
    #define x first
    #define y second
    

    😮

    Über die Konsequenzen bist du dir im Klaren? Meide Makros wo möglich! Warum schreibst du nicht eine Klasse wie diese?

    struct point
    {
        double x;
        double y;
    
        point();
        point(double x, double y);
    };
    

Log in to reply