2D Array

Tags:    c++

Jeg har en Array som klassemedlem med 2 dimensioner: Vertex[][]

Når man laver et nyt object af denne klasse skal den første dimension bare være tom og den anden skal være på 3: Vertex[0][3]

En function i klassen skal forsøge array'en med 1 så når man kører den en gang er den: Vertex[1][3]..

Hvordan gør man det?



10 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Jeg har en Array som klassemedlem med 2 dimensioner: Vertex[][]

Når man laver et nyt object af denne klasse skal den første dimension bare være tom og den anden skal være på 3: Vertex[0][3]

En function i klassen skal forsøge array'en med 1 så når man kører den en gang er den: Vertex[1][3]..

Hvordan gør man det?


Man kan ikke lave en dimension der er tom, man kan lave den med ét index (0).

Et array har fast størrelse fra det bliver defineret. Så du skal bruge en pointer, f.ex:

Fold kodeboks ind/udKode 




Når jeg kører koden siger den "Access Violation" på kode:
f.Vertex[1][0] = 34;



Når jeg kører koden siger den "Access Violation" på kode:
f.Vertex[1][0] = 34;


Der var en BUG :-( følgende burde virke:

Fold kodeboks ind/udKode 




Når du skriver: Vertex[0] = new int [1024];
Betyder det så at Arrayen kun kan være 1024 lang?



Den nye kode virker stadig ikke hos mig.. Den skriver:

Debug Assertion Failed!

Program: D:\\Tests\\Debug\\Text5.exe
File: dbgheap.c
Line: 1017

Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)





Meget meget pinligt, store røde ører.

~foo() skal naturligvis se sådan ud:

~foo()
{
for(int i = 0; i < VertexSize; i++)
delete [] Vertex ;
delete [] Vertex;
}

Bemært efter Vertex i første delete, den i loopen.

Når du har oprettet objektet har Vertex ét array der er 1024 int's lang. Dvs du har:

Vertex[0][0] -> Vertex[0][1023]

Når du har kaldt bar() har Vertex 2 arrays der er 1024 int's lange dvs:
Vertex[0][0] -> Vertex[1][1023];

For hver gang du kalder bar() får Vertex et extra array på 1024 int's.




Koden virker stadig ikke :)

Men jeg har tænkt på om det ikke ville være nemmere at lave det med "list" istedet..

f.eks:

class VertexList
{
public:
void setVertex ( int VertexID, float xPos, float yPos, float zPos );
void getVertex ( int VertexID, float VertexPos[3] );

private:
list<int> ID;
list<float> x;
list<float> y;
list<float> z;
}



Men hvordan kan det være at jeg allerede her får en fejl:
syntax error : missing ';' before '<'



Koden virker stadig ikke :)


Problemet med min kode er at udvikleren laver om på min kode!

I ~foo() er der to gange delete, den første skal delete Vertex index i,
det skriver man som:

delete "firkantet parentes begynd" "firkantet parentes slut" Vertex "firkantet parentes begynd" i "firkantet parentes slut" ;

Problemet er at udvikleren fjerner:

"firkantet parantes begynd" i "firkantet parantes slut"




Men jeg har tænkt på om det ikke ville være nemmere at lave det med "list" istedet..


Følge kan oversættes, jeg ved ikke så meget om list:

#include <list>

class VertexList
{
public:
void setVertex ( int VertexID, float xPos, float yPos, float zPos );
void getVertex ( int VertexID, float VertexPos[3] );

private:
std::list<int> ID;
std::list<float> x;
std::list<float> y;
std::list<float> z;
};

int main()
{
VertexList Vertex;
return 0;
}



Hvis du har fået svar på dit spørgsmål, eller ikke har brug for svaret længere, så luk venligst denne tråd.



/AC



t