En gros ce que dit le titre. J'ai une couleur de classe nommée personnalisée avec ce constructeur:
Color(component_t r, component_t g, component_t b) : r(r), g(g), b(b) {
}
La classe "Image" sur laquelle je travaille a déjà une valeur protégée de: Color * buffer J'essaye de remplir ce buffer avec des instances de la classe Color avec des données d'un autre float * array. Voici mon code:
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]);
}
Cependant, dans la ligne 'buffer [k] = new Color (r [k], g [k], b [k])' à l'intérieur de la boucle for, cela me donne 'no operator "=" correspond à ces opérandes, les types d'opérandes sont: Couleur = Couleur * '
Qu'est-ce que je fais mal?
3 réponses
Vous avez déjà créé tous les Color
ici:
Color* buffer = new Color[width*height];
Pour changer simplement la valeur d'un membre buffer
, vous pouvez faire
buffer[k] = Color(r[k], g[k], b[k]);
Pas besoin d'allouer un nouveau Color
, vous l'avez déjà fait avant.
Votre buffer
contient des Color
ne sont pas des Color*
.
Les éléments suivants devraient fonctionner:
Color** buffer = new Color*[width*height];
Voici quelque chose que vous pourriez faire qui fait quelque chose de similaire: ce n'est pas parfait; car il y a une copie de l'objet couleur; (mais cela pourrait aussi être supprimé si vous le souhaitez) mais c'est une tentative de vous montrer ce que l'utilisation d'un vecteur pourrait faire à votre code.
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);