vectoren definieren



  • hallo ihr lieben,

    ich habe ein problem mit einem 3d-vector. undzwar erstelle ich den vector wie folgt:

    std::vector<std::vector<std::vector<BasicMap, width>, depth>, height> *Map;
    

    aber dann steht bei den width ""width" ist kein typname"
    vllt wisst ihr ja wo,dass problem ist

    schonmal danke im vorhinein,
    whiletruedo



  • Der zweite Templateparameter ist nicht die Größe sondern der Allocator.



  • könntest du mir vllt sagen was dass ist?



  • Wenn ich fragen darf, warum nimmst du keine Vectoren Klasse?

    class Vec3
    {
    public:
    	float	x;
    	float	y;
    	float	z;
    
    public:
    	inline Vec3( void )
    	{
    	}
    	inline Vec3( float X, float Y, float Z )
    	{
    		this->x = X;
    		this->y = Y;
    		this->z = Z;
    	}
    	inline Vec3( float args[ 3 ] )
    	{
    		this->x = args[ 0 ];
    		this->y = args[ 1 ];
    		this->z = args[ 2 ];
    	}
    	inline Vec3( const Vec3& v3 )
    	{
    		this->x = v3.x;
    		this->y = v3.y;
    		this->z = v3.z;
    	}
    	inline float DotProduct( Vec3 v3 )
    	{
    		return( this->x * v3.x + this->y * v3.y + this->z * v3.z );
    	}
    };
    
    typedef Vec3 Vector;
    

    Vector vMin = Vector( -3.56f, -5.55f, 0.f );
    Vector vMax = Vector( 3.56f, 2.25f, 0.f );



  • das ist kein 3D Vector wie er ihn meint - er meint einen 3D-Tensor.


  • Mod

    WhileTrueDo schrieb:

    könntest du mir vllt sagen was dass ist?

    Brauchst du vorerst noch nicht wissen. Nimm einfach std::array , wenn deine Arrays eine feste Größe haben. Das nimmt sogar die Template-Argumente genauso wie in deinem Code-Schnipsel.

    @duplex: Warum markierst du die Memberfunktionen explizit als inline ?
    Warum schreibst du void in die Parameterliste? Und warum this-> vor die Membernamen?



  • ja ich habe am anfang arrays benutzt, allerdings müssen die arrays flexiebel sein, und so bin ich auf vectoren gestoßen. Ich wolle noch erwähnen dass ich auch schon früher mit Vectoren gearbeitet habe, hatte allerdings keine probleme damit 😕



  • Aber dann solltest du doch wissen, daß man bei std::vector die Größe eben nicht als Template-Parameter angibt, sondern im Konstruktor...



  • sry ich habe dass vorher etwas anders gemacht :/. aber mal so, wie löse ich das Problem denn jetzt bzw was muss ich schreiben damit es funktioniert? 😕



  • Schreib mal den Code um einen Vector vom Typen type mit der Größe 5 zu erstellen.
    Und dann schreibste Code um einen Vector vom Typen type mit der Größe 5 zu erstellen, wo für jedes Element der Konstruktor type(5) aufgerufen wird.



  • Schreib dir eine eigene Klasse und reserviere darin einen Block Speicher der Größe (breite*tiefe*hoehe).
    Dann schreibst du deine eigenen Indexzugriffe und berechnest den Index für die Koordinaten (x,y,z) mit index = (z*hoehe+y)*breite+x.


Log in to reply