unsigned int totalVertices = 0; Skulle løse problemet. Da du ikke initierer din integer har du en masse bits der svæver, da du kun sætter de 2 laveste med fread(). Det går galt da du i de fleste tilfælde refererer til et adresseområde udenfor Vertex i Vertex[totalVertices];
Jeg har prøvet at sætte totalVertices = 0, men det løser desværre ikke mit problem. Efter at have eksperimenteret lidt har jeg fundet ud af, at der opstår en linker fejl så snart jeg chunk i ReadVertices metoden. Jeg kan frit benytte chunk andre steder
Du får med andre ord ikke linkerfejlen når du bare kører fread() uden chunk->incrementReadBytes()?? Du er sikker på at du at du ikke kommer til at pege udenfor Vertex[]? Selv med totalVertices initieret skriver du dine 2 bytes til de mest betydende bits i integeren, når du bruger den som buffer på den måde.
Til dit egentlige problem kan jeg kun sige at jeg mangler definition af Chunk, og specialt Chunk::incrementReadBytes.
Men jeg synes dette ser mærkeligt ud:
double* temp = NULL; // <-- jeg er NULL //Linker fejl opstår her chunk->incrementReadBytes(fread(temp, 4, totalVertices, file)); // Jeg læser til NULL
for(int i=0; i<(totalVertices/3); i++) { int vertexIndex = 3*i; vertices[i] = *(new Vertex(temp[vertexIndex], // jeg laver et nyt element bareset på NULL, der laves en new og der derefereres omgående, vil denne new ikke blive til en memory leak? temp[vertexIndex+1], temp[vertexIndex+2])); }
class Chunk { public: Chunk(); Chunk(short id,unsigned int length); ~Chunk(); short getChunkID(); void setChunkID(short id); unsigned int getChunkLength(); void setChunkLength(int chunkLength); unsigned int getBytesReadFromChunk(); void incrementReadBytes(unsigned int bytesRead);
protected: short id; unsigned int length; unsigned int bytesRead; };
Uanset hvilken metode jeg kalder på chunk når jeg befinder mig i ReadVertices opstår der en linkerfejl.
det virkede ved at fjerne "inline" keyworded, så jeg siger mange tak for hjælpen til alle. Her er nogle velfortjente point til segmose.
Jeg var ellers sikker på, at man kunne ”inline” som instruktion, for at sikre at compileren indsætter en kopi af funktionen, hvor den kaldes og derved optimere sit program. Jeg tog tydeligvis fejl : (
Kun hvis den er i scope, hvis du vil inline den skal den stå i en header f.ex. eller i selve class definitionen.
f.ex
class my { int x; public: inline void incX() { ++x; } // typisk one-liner at være inline. }
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.