在 C++ 中创建自定义 Class 的多个实例

Creating multiple Instances of Custom Class in C++

基本上就是标题所说的。我有一个名为 class Color 的 Custom 和这个构造函数:

Color(component_t r, component_t g, component_t b) : r(r), g(g), b(b) {

    }

我正在处理的 Class "Image" 已经有一个受保护的值:Color* buffer 我正在尝试用颜色 class 的实例和来自另一个浮点数的数据填充此缓冲区* array.This 是我的代码:

    Color* buffer = new Color[width*height];

    float* r = new float[width*height];
    float* g = new float[width*height];
    float* b = new float[width*height];

    int i = 0;

    do {
        r[i] = buff[i];
        i++;
        g[i] = buff[i];
        i++;
        b[i] = buff[i];
        i++;
    } while (i < width*height);

    for (int k = 0; k < width*height; k++) {


        buffer[k] = new Color(r[k], g[k], b[k]);
    } 

但是在 for 循环内的 'buffer[k]=new Color(r[k],g[k],b[k])' 行中它给了我 'no operator "=" matches these operands, operand types are: Color=Color*'

我做错了什么?

您的 buffer 包含 Color 而不是 Color*

以下应该有效:

Color** buffer = new Color*[width*height];

您已经在此处创建了所有 Color

Color* buffer = new Color[width*height];

只需更改 buffer 成员的值即可

buffer[k] = Color(r[k], g[k], b[k]);

无需分配新的 Color,您之前已经这样做了。

您可以执行以下类似操作: 它并不完美;因为有颜色对象的副本; (但如果您愿意,也可以删除它)但它试图向您展示使用矢量可以对您的代码做些什么。

std::vector<Color> buffer;
buffer.reserve(width*height);

int i = 0;

do {
    float r = buff[i++];
    float g = buff[i++];
    float b = buff[i++]
    buffer.push_back(Color(r,g,b));
} while (i < width*height);