我定义了一个结构
struct Pixel { uint8_t r, g, b; };
我有一个功能
void setPixel(int x, int y, const Pixel& color);
我必须输入什么颜色值才能setPixel()
函数使其正常工作?我不知道我应该如何定义它。
我在这里错过了什么?
要调用的函数提供的原型。
void setPixel(int x, int y, const Pixel& color);
观察:
- 它想要一个参数用于
x
,一个整数 - 它想要一个参数用于
y
,一个整数 - 它想要一个
color
参数,一个Pixel
,
它恰好是一个参考参数,但这并不立即相关
因此,首先,任何具有三个以上参数的调用都无法正常工作。
其次,您需要给出三个正确类型的参数,前两个为 int 类型,可以是 r 值。您的x
和y
可能没问题,如果它们是 int,如
int x = 5;
int y = 5;
但是,这可能会有点令人困惑,在要调用的函数内部和外部使用相同的名称。所以我推荐
int outsideX = 5;
int outsideY = 5;
第三个参数作为参考参数,需要一个类型为 Pixel
的实际(常量)变量。您需要设置一个。
Pixel outsideColor;
outsideColor.r = 255;
outsideColor.g = 0;
outsideColor.b = 255;
// this will be bright magenta
完成这些准备工作后,您可以将函数调用为
setPixel(outsideX, outsideY, outsideColor);
显然,没有函数将颜色作为三个不同的参数。
相反,您必须使用将结构作为参数的函数。这很容易,就像在
setPixel(some_x, some_y, { some_r, some_g, some_b });
其中定义变量并将其初始化为某些值或直接值。
你只需要正确构造Pixel,例如,你可以使用聚合初始化或手动构造:
struct Pixel { uint8_t r, g, b; };
void setPixel(int x, int y, const Pixel& color) {
std::cout << "Setting " << x << " " << y << " to: " << (unsigned)color.r << " " << (unsigned)color.g << " " << (unsigned)color.b << std::endl;
}
int main() {
// Using aggregate init
setPixel(1, 1, { 255, 255, 255 });
// Manually
Pixel pix;
pix.r = 255;
pix.g = 255;
pix.b = 255;
setPixel(1, 1, pix);
}