2012-04-11 4 views
-2

У меня возник вопрос о поиске размера 2D-вектора. Мой простой вопрос заключается в том, что у меня есть вектор, в котором хранятся три «формы» каждой формы, случайное число hitpoints (хранится как декартовы координаты {x, y, z}), и каждая hitpoint имеет случайный цвет (хранится как RGB) I хотите узнать, сколько hitpoints имеет каждая фигура. Если я:Поиск размера 2D-вектора

VectorOfShapes.size() 

я получить ответ

3 

Это аналогичный вопрос задан до here. Но это не помогло мне. Их решение было

VectorOfShapes[1].size() 

Я попробовал, и я получил следующее сообщение об ошибке «error C2228: left of '.size' must have class/struct/union ». На что было приятно ответить (перейдите по ссылке). Это все еще не помогает мне (или Im, будучи глупым) ... Любые идеи?

// ---------- Добавлена ​​информация

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

Можете ли вы опубликовать объявление «VectorOfShapes»? – hmjd

+1

В 'VectorOfShapes [1] .size',' .size', вероятно, метод, а не переменная, поэтому вам нужно называть его как 'VectorOfShapes [1] .size()'. Но трудно сказать, что такое 'VectorOfShapes'. – karlphillip

+0

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

ответ

1

на основе комментария, предоставляющего декларацию fluxs:

vector<Flux*> fluxs; 

fluxs является вектором указателей, смысл :

fluxs[i] 

возвращает Flux*, не Flux, поэтому вы должны использовать ->, как вы это сделали в опубликованном коде для установки атрибутов. Без определения Flux я предполагаю, есть геттер для получения hitpoints и, как указано там ровно три элемента в fluxs, так, чтобы получить общее количество хитпоинтов в fluxs можно просто:

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

EDIT:

Если HitPoint счетчик является количество элементов в Flux::rays (или Flux::L), то:

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