簡體   English   中英

在C ++中創建自定義類的多個實例

[英]Creating multiple Instances of Custom Class in C++

基本上說的是標題。 我有一個自定義命名類Color與此構造函數:

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

    }

我正在處理的“圖像”類的保護值已經為:Color *緩沖區我正在嘗試使用Color類的實例填充來自另一個float *數組的數據的此緩沖區。這是我的代碼:

    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“ =匹配這些操作數,操作數類型為:顏色=顏色*'

我究竟做錯了什么?

您已經在此處創建了所有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);

您的buffer包含Color而不是Color*

以下應該工作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM