2012-04-11 106 views
-2

我有一個關於查找2D矢量大小的問題。我的一個簡單問題是,我有一個存儲三個「形狀」的矢量,每個形狀有一個隨機數的存儲點(存儲爲笛卡爾座標{x,y,z}),每個存儲點都有一個隨機顏色(存儲爲RGB)I想要找出每個形狀有多少個生命值。如果我做的:查找2D矢量的大小

VectorOfShapes.size() 

我得到的答案

3 

這是一個類似的問題 here問過。但它沒有幫助我。他們的解決方案是

VectorOfShapes[1].size() 

我試過了,我得到了以下錯誤「error C2228: left of '.size' must have class/struct/union 」。這是很好的回答(按照鏈接)。它仍然沒有幫助我(或我是愚蠢的)... 任何想法?

// ----------補充信息

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 2012-04-11 14:48:43

+1

在'VectorOfShapes [1] .size'中,'.size'可能是一個方法,而不是一個變量,因此您需要將它稱爲'VectorOfShapes [1] .size()'。但很難說沒有什麼是VectorOfShapes。 – karlphillip 2012-04-11 14:52:56

+0

'float HitPoints = VectorOfShapes [0] .x + VectorOfShapes [0] .y + VectorOfShapes [0] .z'? – Cyclonecode 2012-04-11 14:55:02

回答

1

基於註釋提供fluxs聲明:

vector<Flux*> fluxs; 

fluxs是指針的載體,意義:

fluxs[i] 

返回一個Flux*,而不是Flux因此您必須使用->,正如您在發佈的代碼中設置屬性所做的那樣。如果沒有Flux我假設的定義存在獲取的hitpoints一個getter和規定有恰好fluxs三個要素,因此要獲得總生命值的fluxs你可以只:

​​

編輯:

如果生命值計數元件在Flux::rays(或Flux::L),則號碼:

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