C++ 将RGB值存储在结构c++;

C++ 将RGB值存储在结构c++;,c++,opengl,rgb,C++,Opengl,Rgb,所以我有一个名为color的结构,我的主要目标是为我的程序创建一个颜色托盘,并通过单个变量而不是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}; glColor3

所以我有一个名为color的结构,我的主要目标是为我的程序创建一个颜色托盘,并通过单个变量而不是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访问这些值。
但是我希望它们都在一个变量中,这样当我想要访问它时,我可以调用变量blue。

glColor3f
不将您的
struct color
类型作为参数。因此,您不能使用
glColor3f(蓝色)

但是,您可以这样定义重载函数:

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

glColor3f
不将您的
struct color
类型作为参数。因此,您不能使用
glColor3f(蓝色)

但是,您可以这样定义重载函数:

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

您不能只将单个变量传递给,因为该函数有三个参数

也就是说,有一个类似的函数需要一个包含三个颜色值的数组。此函数只有一个参数,因此只需向其传递一个参数

因此,对于使用
glColor3fv()
和期望颜色数组的类似函数,我们实际上可以声明如下类型

using color3f = std::array<GLfloat, 3>;
必须调用
data()
成员才能转换为指针


为什么我不只是使用color3f=GLfloat[3]声明一个像
这样的普通数组类型,它不需要调用
data()
成员?因为普通数组有一些缺点,例如,您不能简单地将一个数组分配给另一个数组,如
blue2=blue

您不能只向传递一个变量,因为该函数有三个参数

也就是说,有一个类似的函数需要一个包含三个颜色值的数组。此函数只有一个参数,因此只需向其传递一个参数

因此,对于使用
glColor3fv()
和期望颜色数组的类似函数,我们实际上可以声明如下类型

using color3f = std::array<GLfloat, 3>;
必须调用
data()
成员才能转换为指针


为什么我不只是使用color3f=GLfloat[3]
声明一个像
这样的普通数组类型,它不需要调用
data()
成员?因为普通数组有一些缺点,例如,您不能简单地将一个数组分配给另一个数组,如
blue2=blue

只使用变量blue?给我一个错误“无法将'blue'(type'main()::color')转换为type'const unsigned char*”你能给我们展示一下试图使用变量'blue'的代码吗?在函数中定义类型不是很有用,由于您不能在该函数之外使用它们。这取决于尝试在何处传递它-使用新编辑的代码-是的,您不能这样做-您需要使用与您传递的变量类型匹配的函数,或者至少有一种转换为该类型的方法-只需使用变量blue?给我一个错误“无法转换'blue'(type'main()::color')键入“const unsigned char*”您能告诉我们尝试使用变量“blue”的代码吗?在函数中定义类型不是很有用,由于您不能在该函数之外使用它们。这取决于尝试将其传入的位置-使用新编辑的代码-是的,您不能这样做-您需要使用与您传入的变量类型匹配的函数,或者至少有转换为该类型的方法