stereo matching을 확인하면서, C source style은 track bar를 쉽게 사용할 수 있다.


하지만 C++ source style을 적용하면 문제 되는게 있다. 일단 아래의 source를 보자.


위와 같은 소스를 실행하면, error C3867: 'BM::OnPreFilterSize' : 함수 호출에 인수 목록이 없습니다. '&BM::OnPreFilterSize'을 사용하여 멤버에 대한 포인터를 만드십시오. 라는 error메세지가 나올것이다. 또한 cvCreateBrackbar에서 OnPreFilterSize의 형은 CvTrackbarCallback라는 것을 명심하자.


이에 해결 방법은 다음과 같이 선언하면 된다.

위의 source와 같이 추가하면, 위에 언급한 'error C3867'문제를 해결할 수 있다.


여기서, 추가적으로 OnPreFilterSize에서 class의 멤버 변수를 변경 할 수 없다.


여러가지 방법이 있겠지만, 내가 오늘 알게 된 것은 다음과 같다.

위와 같이 추가적으로 선언해주면, static function에서도 멤버 변수를 변경 할 수 있다.





이론은 다른데에서 보시구요~

그냥  "char *"를 인자로 받아가지고 사용하는 방법을 나타냈습니다.


그냥 소스로 설명.... ㅋㅋ




void func(char *p, ...);


void main()

{

func("Hi", "man", "boy");

}



void func(char *p, ...)

{

va_list ap;

char *target, buf[_MAX_DIR];

int i = 0;


target = va_start(ap, p);

vsprintf(buf, p, ap);

do

{

if (i++ != 0)

{

sprintf(buf, target);

}

// using this 

}while((target = va_arg(ap, char *)) != NULL);

va_end(ap);

}


간단히 설명 하자면, "main" 에서 함수를 사용한다. 

여기서 인자는 "Hi", "man" and "boy" 3개를 함수("func")에 넘긴다.


그다음 함수("func")에서는 다음과 같다.

va_list 인자 생성 하고 사용할 변수를 선언한다. 여기서 "i"는  내가 기술이 부족하여 첫번째는 "target"에 바로 받았고, 두번째는 "buf"에 넣기 위해서다. (이상하게 첫번째는 "vsprintf"를 사용해야 하며, 두번재는 "sprintf"를 사용하니깐.... 잘되더라....

"while"문을 조건을 주면서 다음 인자를 받아오며, "va_end"로 마친다.



화내지 말자!!!!!

+ Recent posts