【问题标题】:C++ Constructor initialization list with array带有数组的 C++ 构造函数初始化列表
【发布时间】:2016-03-02 18:29:24
【问题描述】:

我在这里做错了什么?编译器告诉我这是一个语法错误。

class Color {
private:
    float rgba[4];
public:
    Color(float red, float green, float blue, float alpha=1.0):
            this->rgba[0] (red * alpha),
            this->rgba[1] (green*alpha)
            this->rgba[2] (blue*alpha)
    {

    }
};

【问题讨论】:

  • 我知道这可能只是一个家庭作业。但请检查您的图形库是否真的需要将 RGBA 预乘以 A
  • 乘以 A 是不是一个坏主意?你能告诉我更多关于它的信息吗?
  • “A”的原因是一次更改所有颜色,处理叠加图像等。通常图形硬件会在显示时进行乘法运算。
  • this->rgba[0] 是一个错误。在: 之后唯一可以出现的是成员标识符,即rgba 是这个类的唯一选项

标签: c++ arrays constructor


【解决方案1】:

应该是

Color(float red, float green, float blue, float alpha=1.0):
            rgba{red * alpha, green*alpha, blue*alpha, 0}
    {

    }

【讨论】:

  • 这假定编译器兼容 C++11。有些人仍然没有使用 C++11。
  • 有些人还没有发现电脑,所以我们应该把这个答案打印出来并做传单投递
【解决方案2】:

您可以使用 asigment 运算符代替括号:

this->rgba[0](red * alpha) // wrong
this->rgba[1] = red * alpha // ok

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多