zugriff auf struct



  • elturco schrieb:

    Also mit casten hat es nichts zu tun, dass int habe ich danach davorgestellt...

    Das Casten ist dabei natürlich nicht der eigentliche Fehler. Trotzdem:

    du machst sowas:

    point p;
    cout<< p;
    

    du willst aber sowas:

    point p;
    cout<< p.x << "," << p.y;
    

    Du versuchst, den point _direkt_ auszugeben. Egal, ob du noch castest oder nicht... es funktioniert nicht.



  • @Ivo, danke Dir...

    @Spacelord, wie kann ich es denn verhindern, dass er mir diese Fehlermeldung nicht mehr gibt, einfach diese Zeile mit

    point punkt = {x,y};
    

    entfernen ?



  • Indem du den Konstruktor auch benutzt?

    point punkt(x,y);
    


  • Ich komm einfach nicht weiter, jetzt bekomme ich ein Linker fehler :-):-(!6²§&+

    Compiling...
    polgon.cpp
    Linking...
    polgon.obj : error LNK2001: unresolved external symbol "public: __thiscall point::point(void)" (??0point@@QAE@XZ)
    Debug/Polygon.exe : fatal error LNK1120: 1 unresolved externals
    Error executing link.exe.
    


  • Zeig mal den aktuellen Code von struct point.
    Der sucht nach der Implementierung eines Konstruktors,der keine Parameter erwartet.



  • @Spacelord danke Dir man

    struct point
    {
    public:
    	int x,y;
    	point();
    	point(int _x, int _y) : x(_x), y(_y) {};
    
    };
    


  • Nimm den point() Konstruktor raus und ändere den mit den 2 int Parametern so ab dass dieser als Standardkonstruktor benutzt werden kann.

    struct point
    {
    public:
        int x,y;
        point(int _x=0, int _y=0) : x(_x), y(_y) {};
    };
    

    Halt genau so wie ich es dir gestern Mittag schon in dem anderen Forum gepostetet habe..... 🙄



  • Da bin ich mir jetzt nicht so sicher, aber ich glaube so gehts dann:

    ...
    int x,y;
    point() {};
    point(int _x, int _y) : x(_x), y(_y) {};
    

    sinnvoller wäre vielleicht aber auch statt

    point() {};
    

    sowas

    point() {x = 0; y = 0;}
    


  • Ist im Grunde das gleiche wie auch spacelord geschrieben hat.



  • Heyy Leute danke euch vielmals, ich habe noch eine ganz kleine Frage, ich bin euch echt sehr dankbar, ich möchte nun, meinen Vector auslesen und einen Polygon zeichnen. Ich habe folgendes geschrieben:

    void draw()
    {
    	point p;  ??
    	std::vector<point>::iterator i = punktliste.begin();
    
    	for ( i=punktliste.begin(); i != punktliste.end(); ++i ){
    
    		cout<<"wert   "<<p.x<<p.y<<"\n";
    	}
    }
    

    das klappt aber nicht so, was mache ich denn hier falsch ? Ok, mein Konstruktor hat 2 Parameter ? vielleicht ist das mein Fehler, muss ich den hier mit zeigern arbeiten ?



  • Klar, mit dem was ich geschrieben hab, kann man keine Punkte und Linien zeichen, ich wollte auch nur erstmal auslesen, das mit glVertex und so müsste ich schon hinkriegen...



  • mein code vorhin sollte nur exemplarisch sein.

    Der point p ist unnötig, bei dir müsste es natürlich i.x << i.y sein.
    Aber vorsicht, ich habe sowas in Erinnerung, dass man bei Iterators mit Zeigern arbeitet, also vielleciht muss es auch heißen i->x << i->y.
    [edit]
    Aus meiner Erinnerung... vielleicht sogar so: *i->x . Ich weiß es aber nicht mehr so genau.
    [/edit]

    Ansonsten... sowas hier geht auch:

    void draw()
    {
        for ( i = 0; i < punktliste.size(); i++ ){
    
            cout<< "wert   " << punktliste[i].x << punktliste[i].y << "\n";
        }
    }
    

    Sehe ich aber selten hier im Forum, weiß nicht, ob das verpönt ist und Nachteile hat - würde aber funktionieren.



  • elturco schrieb:

    ....das mit glVertex und so müsste ich schon hinkriegen...

    Sei mir nicht böse, aber zum momentanen Zeitpunkt habe ich Zweifel daran.

    Gruß Spacelord



  • ja ich bin Dir nicht böse Spacelord, die Aufgabe kam ein wenig plötzlich, konnte mich nicht effizient in die Materie einarbeiten, deshalb schlage ich mich auch hier rum, aber ich danke euch beiden, immerhin habe ich bisher was dazu gelernt von euch...



  • Hiii,

    ich möchte euch nochmal was fragen, wenn ich die Polygone zeichnen möchte, bekomme ich nicht alle Linien gezeichnet, sonderen immer den darauf folgenden, ich habe folgendes gemacht einfach:

    void zeichne()
    {
    	for(int i = 0;i<punktliste.size();i++)
    	{
    		cout<<"wert   "<<punktliste[i].x<<"   "<<punktliste[i].y<<"\n";
    		glBegin(GL_LINES);
    		glVertex2i(punktliste[i].x,punktliste[i].y);	
    	}   
    }
    

    Ich möchte jetzt nun so vorgehen, dass ich noch einen struct definiere und die Linien in einen vector abspeichere und danach einfach durchlaufen lassen. Ich mein, findet Ihr es denn Effizient das so zu machen, denn ich möchte die Polygone abspeichern und laden können, und wenn ich 2 - 3 vectoren habe, ist das doch ein wenig kompliziert gemacht oder nicht ?

    was meint Ihr ?


Anmelden zum Antworten