0

ここには minizip() を呼び出すコードがいくつかあります。これは、minizip プログラムのボイラープレートのダーティな名前が付けられた main() ですが、コンパイルすると、*`minizip(int, char**)* への未定義の参照が得られます。これがコードです。

int minizip(int argc, char* argv[]);

void zipFiles(void)
{
 char arg0[] = "BBG";
 char arg1[] = "-0";
 char arg2[] = "out.zip";
 char arg3[] = "server.cs";

 char* argv[] = {&arg0[0], &arg1[0], &arg2[0], &arg3[0], 0};

 int argc = (int)(sizeof(argv) / sizeof(argv[0])) - 1;

 minizip(argc, argv);
}

int minizip(argc,argv)
    int argc;
    char *argv[];
{
    ...
}
4

2 に答える 2

2

そのコードはすべて同じファイルにありますか?そうでない場合、および呼び出し元がC ++コードでminizipCコードの場合、呼び出し元は、C関数を呼び出すため、Cリンケージが必要であることを示すために、ブロックminizip内の宣言が必要になる場合があります。extern "C"

(また、エラーメッセージを再入力しないでください。正確になるようにコピーして貼り付けてください。この場合、コンパイラは、への未定義の参照を報告した可能性がありminizip(int, char**)ます。)

于 2010-08-21T08:33:44.417 に答える
1

次の場所で関数の引数を再度宣言するのはなぜですか。

int minizip(argc,argv)
    int argc;
    char *argv[];
{
    ...
}

それは言うべきです

int minizip(int argc,char *argv[])
    {
        ...
    }
于 2010-08-21T08:38:03.057 に答える