3D Array



  • Hallo

    Ich hab das jetzt versucht einen solchen Vektor

    vector< vector<double> > 3DArray(x, vector<double>(y, vector<double>(z))));

    zu deklarieren, dann bringt er aber 4 Fehlermeldungen:
    ...:errorC2143: Syntaxfehler: Fehlendes ';' vor '<'
    ...:errorC2501: 'vector': Fehlende Speicherklasse oder Typbezeichner
    ...:errorC2143: Syntaxfehler: Fehlendes ';' vor '<'
    ...:errorC2143: Syntaxfehler: 'Ungültiges Suffix auf Zahl'

    Die <vector> hab ich bereits als include mit drin.

    Kann mir bei diesen Problem jemand weiterhelfen?
    thx

    HANG LOOSE



  • Dieser Thread wurde von Moderator/in Unix-Tom aus dem Forum MFC mit dem Visual C++ in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • @pippo

    Was soll dieser Code bedeuten? Ergibt für mich irgendwie keinen Sinn.

    @roeschti

    Beschreibe dein Problem bitte etwas genauer. So wie ich das verstanden habe, brauchst du lediglich einen eindimensionalen vector, der bspw. eine Struktur mit drei double Membern (Komponenten des Raumpunkts) speichert, oder liege ich da falsch?



  • Also,

    im Grunde liegst du richtig mit deiner Annahme, hier aber nochmal kurz eine Zusammenfassung
    Ich habe 3 CStringArray, also Felder mit Strings als Elemente latitude_str... , und möchte diese Verarbeiten. Das Ergebnis ist dann jeweils ein double Wert. Im Grunde ist das Schema so:

    latitude_str longitude_str altitude_str => x(double) y(double) z(double)
    50.92376956 11.34873937 201.70 3945377.85 809444.55 4929325.42

    Die Umrechnung und so klappt alles. Nun möchte ich x,y,z in einen dreidimensionalen Vektor, oder eine Struktur mit drei Membern schreiben. Die Anzahl der Elemente in diesen Vektor ist nicht immer gleich.

    tschö mit ö



  • Meinst du einen mathematischen Vektor oder die std::vector Containerklasse?



  • So gut bin ich noch net, wo ist denn der Unterschied?

    Vom Gefühl her würde ich sagen die Containerklasse 🙄



  • also du kannst eine 2D matrix mit beliebigen ZEILEN aber nur mit 3 SPALTEN

    std::vector<std::vector<double> > mat;
    mat.size()=10; // hier kannst du beliebig deine Zeile festlegen
    for(int Row= 0;Row<mat.size(); ++Row)  		 
    { 
     // mat.resize(Row + 1);    //optional:wenn du mat.size()unbekannt: Speicher für vector in Matrix reservieren 
    
      //Speicher für den inneren vector reservieren 
      mat[Row].resize(3);  // 3 Steht für die Anzahl der Elemente (Spalten)pro  Zeile 
    
        mat[Row][0]=x;                	
        mat[Row][1]=y; 
        mat[Row][2]=z; 
    
    }
    

    ich habe es nicht getestet aber sollte funktionieren
    Viel Glück



  • Ok,

    nun bringt er aber folgende Fehlermeldung:
    ...:error C2146: Syntxfehler: Fehlendes ',' vor Bezeichner 'mat'
    ...:error C2065: 'mat': nichtdeklarierter Bezeichner
    ...:error C2143: Syntaxfehler: Fehlendes '>' vor ';'

    Muss ich vielleicht noch eine include einbinden?



  • Die std::vector Klasse ist Bestandteil der Standard Template Library und ist vom Prinzip her ein dynamisches Array, d.h. es kann beliebig wachsen und schrumpfen. Es hat nichts mit einem mathematischen Vektor zu tun, da käme eher die Klasse valarray in Frage, aber die habe ich noch nie benutzt. Vielleicht hilft dir ja das:

    #include <vector>
    
    template<typename T>
    struct Point3D
    {
       //Komponenten
       T x, y, z;
    
       //Konstruktor  
       Point3D(T X, T Y, T Z): x(X), y(Y), z(Z)
       {}
    
       //"intuitivere" Art, den Komponenten neue Werte zuzuweisen
       Point3D& operator()(T X, T Y, T Z)
       {
           x = X;
           y = Y;
           z = Z;
    
           return(*this);
       }
    };
    
    /* ......... viel viel Code .........*/
    
    //Hier werden die Punkte gespeichert
    std::vector<Point3D<double>> punkte;
    
    /*
      Jetzt könntest du Beispielsweise so vorgehen:
      In einer Schleife gehst du deine Stringarrays durch,
      wandelst die einzelnen Werte in double um und speicherst sie
      im dynamischen Array
    */
    for(int i = 0; i < arraySize; i++) //arraySize ist die Größe deiner drei Arrays
                                       //von denen ich ausgehe, dass sie gleich groß
                                       //sind
    {
        //Erzeugen eines neuen Point3D Objektes
        //rechne_um soll halt zeigen, dass die einzelnen Komponenten vorher
        //umgerechnet werden. Keine Ahnung, wie du das in deinem Programm machst.
        Point3D<double> einPunkt(rechne_um(latitude_str[i]), rechne_um(longtitude_str[i]), rechne_um(altitude_str[i]) );
    
       punkte.push_back(einPunkt); //Speichern des neu erzeugten Punkts im dynamischen Array
    }
    
    /* ......... noch mehr Code .........*/
    


  • ach so ja du musst die

    #include <vector>
    

    einbinden



  • ja, die include vector hab ich drin, aber bei der Zeile:

    std::vector<Point3D<double>> punkte;

    möchte er folgendes Aussehen:

    std::vector<Point3D<double>, punkte>;

    und dann jammert er immer noch das der Bereichner punkte nicht deklariert wäre.
    Kann das vielleicht mit meinem Visual C++ und den Projekteinstellungen was zu tun haben?

    tschö



  • versuche es mal so:
    std::vector< Point3D<double> > punkte;
    oder so:
    std::vector< Point3D< double > > punkte;

    std::vector<Point3D<double>, punkte>; ist falsch



  • Jaaaaaaaaaaaaaaaaaaaa

    es jeht, das sch.. Ding jeht.

    Klasse, ich danke euch 😃

    achso, zwei was noch:

    1. punkte.push_back(i); bei dem i meintest du doch einPunkt oder?
    2. wenn ich die punkte jetzt wieder auslesen will, weil noch weitere Berechnungen folgen kann ich dann vector::at nehmen?

    HANG LOOSE



  • Ups du hast recht. 😃 ja ich meinte einPunkt, ich ändere es gleich. Nächstes mal sollte ich code testen, bevor ich ihn poste lol



  • Aber trotzdem super, danke nochmal - so hat der Tag gleich ein angenehmes Ende 🕶

    HANG LOOSE


Anmelden zum Antworten