2017-06-29 122 views
0

所以我有一個名爲color的結構我的主要目標是爲我的程序創建一個托盤顏色,並通過一個變量而不是RGB值或三個不同的結構變量訪問它們。在一個struct C++中存儲RGB值

函數聲明

WINGDIAPI void APIENTRY glColor3f(GLfloat red,GLfloat green,GLfloat blue); 

struct color 
{ 
    GLfloat r; 
    GLfloat g; 
    GLfloat b; 

}; 
color blue={0.0,0.0,255.0}; 

glColor3f(blue); 

我能夠通過blue.r,blue.g,blue.b.訪問值 但相反,我希望他們都在一個變量,所以當我想要訪問它,我可以調用變量藍色。

+4

只使用變量blue? – lostbard

+0

給我一個錯誤「無法將'blue'(類型'main():: color')轉換爲類型'const unsigned char *' –

+0

您能告訴我們代碼嘗試使用變量'blue'嗎? –

回答

3

只能一個變量不傳遞給glColor3f()因爲該功能具有參數。

這就是說有一個類似的功能glColor3fv()需要三個顏色值的數組。此功能只有單參數,因此您只需將一個參數傳遞給它。

因此,對於與期望顏色陣列glColor3fv()和類似的功能使用,我們實際上可以聲明一個類型是這樣的...

using color3f = std::array<GLfloat, 3>; 

......這能這樣使用:

color3f blue={0.0,0.0,255.0}; 
glColor3fv(blue.data()); 

data()成員的調用是將std::array轉換爲指針所必需的。

爲什麼我不只是聲明像using color3f = GLfloat[3]這樣的普通數組類型,它不需要調用data()成員?由於普通數組有一些缺點,例如,不能簡單地將其分配給另一個,如blue2 = blue;

2

glColor3f不會將您的struct color類型作爲參數。所以你不能使用glColor3f(blue)

但是,你可以定義一個重載函數,像這樣:

void glColor3f(struct color &c) { 
    glColor3f(c.r, c.g, c.b); 
}