2012-04-11 1 views
-2

Ich habe eine Frage über die Größe eines 2D-Vektors. Meine einfache Frage ist, dass ich einen Vektor habe, mit dem drei "Shapes" gespeichert sind. Jede Form hat eine zufällige Anzahl von Hitpoints (gespeichert als kartesische Koordinaten {x, y, z}) und jeder Hitpoint hat eine zufällige Farbe (gespeichert als RGB) möchte herausfinden, wie viele Hitpoints jede Form hat. Wenn ich das tue:Die Größe eines 2D-Vektors finden

VectorOfShapes.size() 

bekomme ich die Antwort

3 

Dies ist eine ähnliche Frage gestellt, bevor here. Aber es hat mir nicht geholfen. Ihre Lösung war

VectorOfShapes[1].size() 

ich versucht, und ich bekam die folgende Fehlermeldung „error C2228: left of '.size' must have class/struct/union “. Was schön beantwortet wurde (folgen Sie dem Link). Es hilft mir immer noch nicht (oder ich bin dumm) ... Irgendwelche Ideen?

// ---------- Hinzugefügt info

class World { 
public: 
vector<Flux*> VectorOfShapes; 
void 
containers(int obnum, Ray reflect, RGBColor Ll); 
void      
build(void); 
void 
add_vectorshape(Flux* vectorshape_ptr) 
private: 
void 
delete_VectorOfShapes 
} 
inline void 
World::add_vectorshape(Flux* vectorshape_ptr){ 
VectorOfShapes.push_back(vectorshape_ptr); 
} 

void 
World::containers(int obnum, Ray reflect, RGBColor Ll) 
{ 
vectorOfShapes[obnum]->push(reflect); 
VectorOfShapes[obnum]->push(Ll); 
int sizers = VectorOfShapes[0].size(); //this is where the code is giving me errors 
} 

void             
World::build(void) { 
Flux* vectorshape_ptr1 = new Flux; 
add_vectorshape(vectorshape_ptr1); 
Flux* vectorshape_ptr2 = new Flux; 
add_vectorshape(vectorshape_ptr2); 
Flux* vectorshape_ptr3 = new Flux; 
add_vectorshape(vectorshape_ptr3); 
} 

void 
World::delete_VectorOfShapes(void) { 
int num_VectorOfShapes = VectorOfShapes.size(); 

for (int j = 0; j < num_VectorOfShapes; j++) { 
    delete VectorOfShapes[j]; 
    VectorOfShapes[j] = NULL; 
} 

VectorOfShapes.erase (VectorOfShapes.begin(), VectorOfShapes.end()); 
} 

    class Flux{ 

public: 
std::vector<Ray> rays; 
std::vector<RGBColor> L; 


void push(Ray ray); 
void push(RGBColor Ls) ; 


}; 
inline void 
Flux::push(Ray ray) { 
rays.push_back(ray); 
} 

inline void 
Flux::push(RGBColor Ls){ 
L.push_back(Ls); 
} 
+2

Können Sie eine Deklaration von 'VectorOfShapes' aufgeben? – hmjd

+1

In 'VectorOfShapes [1] .size' ist' .size' wahrscheinlich eine Methode, keine Variable, also müssen Sie sie wie 'VectorOfShapes [1] .size()' aufrufen. Aber es ist schwer ohne zu sagen, was "VectorOfShapes" ist. – karlphillip

+0

'Floaten HitPoints = VectorOfShapes [0] .x + VectorOfShapes [0] .y + VectorOfShapes [0] .z'? – Cyclonecode

Antwort

1

Basierend auf den Kommentar, die Erklärung von fluxs Bereitstellung:

vector<Flux*> fluxs; 

fluxs ist ein Vektor von Zeigern, bedeutung :

fluxs[i] 

gibt ein Flux*, kein Flux müssen Sie also -> verwenden, wie Sie es im eingestellten Code zum Setzen von Attributen getan haben. Ohne die Definition von Flux ich dort gehe davon ist ein Getter für die hitpoints zu erhalten und wie gesagt gibt es genau drei Elemente in fluxs, so das insgesamt Hitpoints in fluxs bekommen konnte man nur:

int total_hitpoints = fluxs[0]->get_hitpoints() + 
         fluxs[1]->get_hitpoints() + 
         fluxs[2]->get_hitpoints(); 

EDIT:

Wenn die Hitpoint Zählung die Anzahl der Elemente in Flux::rays (oder Flux::L) dann:

int total_hitpoints = fluxs[0]->rays.size() + 
         fluxs[1]->rays.size() + 
         fluxs[2]->rays.size();