2017-11-27 9 views
0

기본적으로 제목은 무엇입니까? 나는이 생성자와 사용자 정의라는 이름의 클래스 색상이 있습니다C++에서 사용자 정의 클래스의 여러 인스턴스 작성

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

    } 

더 클래스 "이미지"내가 일하고 있어요이 이미 보호 값 : 컬러 * 버퍼 나는의 인스턴스와이 버퍼를 채우기 위해 노력하고 있어요 에서 그러나

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])'다른 플로트 *의 array.This 데이터 컬러 클래스 내 코드 line for the loop 내에서 'no operator "="이 피연산자와 일치합니다. 피연산자 유형은 다음과 같습니다. Color = Color *'

내가 뭘 잘못하고 있니?

+1

원시 포인터를 사용하는 것 외에는? ;) {가능한 경우 스마트 포인터를 사용하십시오. 또는 std :: vector 무엇을하고있는지를 확인하십시오 !!} – UKMonkey

+0

'buffer [k]'는 Color 타입입니다. 에러 메시지에 나와 있습니다. 왜 ypu는 전혀 새로운 것을 사용합니까? –

+0

'g [i] = buff [i];'? 두 가지 인덱스가 필요하다고 생각하지 않습니까? r [0], g [1], b [2]에 값을 할당합니다. –

답변

1

을 이미 여기에 모든 Color의를 만들었습니다 :

다음 작업을해야합니다

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

당신이 할 수있는 buffer 멤버의 값을 변경하려면

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

새 번호 Color을 할당 할 필요가 없습니다. 벌써 그것을했다.

0

bufferColor이 포함되어 있지 않습니다. 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));를 사용하는 편이 낫다. –