2017-11-27 1 views
0

基本的には、私はこのコンストラクタを持つカスタムという名前のクラスの色を持っている:C++でのカスタムクラスの複数のインスタンスの作成

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

    } 

クラス「イメージ」私が働いているあり、すでに保護された値の:色*バッファ 私はのインスタンスと、このバッファを埋めるためにしようとしています別のフロートのデータでカラー・クラス* 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]); 
    } 

しかしに '[k]をバッファ新しい色(R [K]、G [K]、B [k]を)=' forループの中にある行は、「演算子なし」=「これらのオペランドに一致します。オペランドの型は次のとおりです:Color = Color *」

どうしたんだ?

+1

生ポインタを使用する以外は? ;){可能な場合はスマートポインタを使用します。またはstd :: vectorあなたがやっていることのために!} – UKMonkey

+0

'buffer [k]'は、色のタイプです。なぜypuは全く新しいものを使うのですか? –

+0

'g [i] = buff [i];'? 2つの異なるインデックスが必要だと思いませんか? r [0]、g [1]、b [2]に値を代入します。 –

答えて

1

をあなたはすでにここにすべてColor Sを作成しました:

次の作業をする必要があり

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

ちょうどあなたが行うことができますbufferメンバーの値を変更するには

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

新しいColorを割り当てる必要はありません。すでにそれを前にした。

0

bufferにはColorが含まれていません。Color*です。

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

これはあなたが行うことができることです。これは似たようなものです: これは完璧ではありません。カラーオブジェクトのコピーがあるので、 (ただし、これを削除したい場合は削除することもできます)が、ベクターを使用してコードに何ができるかを示す試みです。

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); 
+0

'reserve(width * height);と' push_back(Color(r、g、b)); 'を使うほうが良いでしょう。 –

関連する問題