2013-03-05 8 views
0

C 나 C++를 너무 자주 사용하지 않지만 나는 이미 Windows 용으로 C++ 파일의 복사본 인 opencv로 얼굴을 탐지하는 파일 컴파일을 마치면 입니다. 소셜 네트워크에 태그 오류 내가 컴파일 코드로 얻을 나는 [] argv를 보낼 수 있도록하려면 다음 중 하나호환되지 않는 유형 c에서 할당

In function 'main': 
warning: assignment from incompatible pointer type 

int main(int argc, char** argv[]) 
{ 
    char* dea; 

    int i=0; 
    while(i<argc) 
    { 
     if(i==1){ 
      dea=argv[i]; 
     } 
     i++; 
    } 

    char image[400],temp_image[400]; 


    IplImage *img,*temp_img; 
    int  key; 


    storage = cvCreateMemStorage(0); 
    cascade = (CvHaarClassifierCascade*)cvLoad(face_cascade, 0, 0, 0); 

    if(!(cascade)) 
    { 
     fprintf(stderr, "ERROR: Could not load classifier cascade\n"); 
     return -1; 
    } 



    sprintf(image,"dimage%d.jpg"); 

    img=cvLoadImage(dea,0); 
    temp_img=cvLoadImage(dea,0); 

    if(!img) 
    { 
     printf("Could not load image file and trying once again: %s\n",image); 
    } 
    printf("\n curr_image = %s",image); 

    detectFacialFeatures(img,temp_img); 


    cvReleaseHaarClassifierCascade(&cascade); 
    cvReleaseMemStorage(&storage); 

    cvReleaseImage(&img); 
    cvReleaseImage(&temp_img); 


    return 0; 
} 

입니다 실행 한 후 첫 번째 인수로 따라서 사진의 위치를 ​​파싱해야하므로 char * dea에 할당 할 루프를 시도했습니다. ARGV의 값은 [I] 난 1

I는 DEA 할 것이다 = ARGV 때 [1]

하지만이 접근했다 그래서 에러의 다른 종류를 던진다.

+0

전체 오류 메시지 또는 최소한의 컴파일 가능한 테스트 케이스를 게시하시기 바랍니다. – Sebivor

+0

argv는 char ** 유형이어야하며 char *** 유형이 아니어야합니다. –

답변

9

는 ARGV는 char **argv, 또는 char *argv[]로 선언,하지만 당신은 트리플 포인터입니다 char **argv[]로 선언되어야한다.

char *char에 할당하려고합니다.

+1

네, 맞습니다. 지금 바로 컴파일하여 답을 고를 수 있습니다 (정답을 선택할 수있는 시간이 없습니다). 후에 – lbennet

3

가 나는

char** args 

또는

char* args[] 



하지

char** args[] 
0
dea=argv[i]; 
을해야 당신이 당신의 인수가 잘못 선언 한 생각3210

이중 포인터 char** argv[]을 단일 포인터 char* dea에 지정합니다. argv의 값을 dea에 할당하고 싶다면 dea를 double pointer로 취하십시오.

char** dea; 
dea[i] = argv[i]; 
관련 문제