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?

0
hadrianstav 27 nov. 2017 à 17:47

3 réponses

Meilleure réponse

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.

1
Bo Persson 27 nov. 2017 à 14:55

Votre buffer contient des Color ne sont pas des Color*.

Les éléments suivants devraient fonctionner:

Color** buffer = new Color*[width*height];
0
Emir Uner 27 nov. 2017 à 14:52

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);
1
UKMonkey 27 nov. 2017 à 15:12
47513680