从不兼容的类型c分配

时间:2013-03-05 10:12:03

标签: c++ c linux compilation argv

我不经常使用C或C ++,但我是关于 完成编译一个用opencv检测面的文件,这个文件是已经为windows做的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;
}

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

我会做dea = argv [1]

但是这引发了一种不同的错误,所以我采用了这种方法。

3 个答案:

答案 0 :(得分:9)

应将Argv声明为char **argvchar *argv[],但您将其声明为char **argv[] triple 指针。

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

答案 1 :(得分:3)

我认为你的args声明错了 它应该是

char** args

char* args[]



不是

char** args[]

答案 2 :(得分:0)

dea=argv[i];

您正在为单个指针char** argv[]分配双指针char* dea。如果你想将argv的值赋给dea,那么将dea作为双指针。

char** dea;
dea[i] = argv[i];