0

我不经常使用 C 或 C++,但我即将完成编译一个使用 opencv 检测人脸的文件,该文件是已经为 Windows 执行的 c++ 文件的副本,用于在社交网络中进行标记,错误我get with code when compile 是下一个

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;
}

我希望能够将要解析的照片的位置作为可执行文件之后的第一个参数发送到 argv[],因此我尝试使用循环分配给 char* dea; 当 i 为 1 时 argv[i] 的值。

我会做 dea=argv[1]

但这会引发另一种错误,所以我采用了这种方法。

4

3 回答 3

9

Argv 应声明为char **argv, 或char *argv[],但您将其声明为char **argv[]三重指针

您正在尝试将 a 分配char *给 a char

于 2013-03-05T10:14:00.787 回答
3

我认为您的参数声明错误应该是

char** args

或者

char* args[]



不是

char** args[]
于 2013-03-05T10:15:02.510 回答
0
dea=argv[i];

您正在将双指针分配给char** argv[]单指针char* dea。如果您想将 argv 的值分配给 dea 则将 dea 作为双指针。

char** dea;
dea[i] = argv[i];
于 2013-03-05T11:37:28.200 回答