2013-05-10 6 views
0

나는 다음과 같은 함수 선언을해야: CONST 포인터 포인터 없습니다

int vectorQuantization(const Color **input, Color **output, 
         const int rows, const int cols, const int numColors); 

나는 내 메인 함수에서 호출하려고 할 때 오류 "VectorQuantization '에 대한 호출에 대한 일치하는 기능을 얻을 ''.

Color *input2quantize; 
Color *outputQuantized; 
... 
... 
vectorQuantization(&input2quantize, &outputQuantized, rows, cols, 10); 

는 내가 뭘하려고했던 것은 함수 내에서 수정할 수 없습니다 내가 그것을 선언하는 등의 일정을 만들 것이라고 생각 있도록 함수 상수의 입력을 확인하는 것입니다. 여기에 무엇이 누락 되었습니까? 포인터 대신 포인터를 사용하는 것에 대해 생각하고 있었지만 혼란 스러웠습니다. 두 가지 질문이 있습니다.

  1. 이 오류를 어떻게 해결할 수 있습니까?
  2. 포인터 대신 const 포인터 대신 참조를 사용하는 것이 더 좋습니까?

    원하는 경우
    typedef Color * ColorPtr; 
    
    ColorPtr input2quantize; 
    
    int vectorQuantization(ColorPtr const * input); 
    
    vectorQuantization(&input2quantize); 
    

    , 당신은 함수 인수도 Color * const * input로 타이프 철자 수 :

+0

vectorQuantization ((const를 컬러 &) input2quantize, outputQuantized (CONST의 int)를 행 (CONST의 int)를 COLS (CONST의 INT) 10); – Lefsler

답변

1

는이 말. 이것은 당신이 변경 가능한 포인터를 갖고 있기 때문에 함수가 보호 할 수없는 포인터 아닌 pointee을 변경할 수있는에서 당신을 보호하는 것이

참고. 당신이 원하는 경우에, 당신은 별도의 형식이 필요 것 :

typedef Color const * SafeColorPtr; 

SafeColorPtr safeinput = input2quantize; 

int foo(SafeColorPtr const * pInput); 

foo(&safeinput); 
+0

실제로 포인터가 보호 되어도 pointee를 보호 할 수 있습니다. 'T **'는'const T **'로 변환 할 수 없지만'const T * const * '로 변환 할 수 있습니다. – Angew

+0

대단히 감사드립니다. 포인터의 포인터 대신 참조를 사용하여 변경할 수 있습니까? (좋은 생각입니까?) 무엇이 최선의 선택일까요? – BRabbit27

+0

아마도 주제를 벗어나고 싶지만, const 형 * imgIn과 int 형 * imgIn'의 차이점은 무엇입니까? 물어보고 싶습니다. ** const **를 데이터 형식 앞이나 뒤에 넣으시겠습니까? – BRabbit27