0

私は C も C++ もあまり使用しませんが、opencv で顔を検出するファイルのコンパイルを終了しようとしています。これは、ソーシャル ネットワークでタグ付けするための 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; に割り当てようとしました。i が 1 の場合の argv[i] の値。

私は dea=argv[1] をします

しかし、それは別の種類のエラーをスローするため、このアプローチを採用しました。

4

3 に答える 3

9

Argv はchar **argv、またはとして宣言する必要がありますが、それはトリプルポインターであるchar *argv[]と宣言しました。char **argv[]

char *aを 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 に答える