在 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);
基本上就是标题所说的。我有一个名为 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);