3

Windowsでうまく動作するプログラムをUbuntu 11.04でコンパイルしようとしていますが、上記のエラーが発生します。エラーの原因となっている行にコメントを追加しました。コードは次のとおりです。

route_input() {
    int num_routes;//Variable to act as the loop counter for the loop getting route details
    int x;

    char route_id[3];
    char r_source[20];
    char r_destination[20];
    int r_buses;



    printf("Please enter the number of routes used: \n");
    scanf("%d", &num_routes);
    char routes_arr[num_routes][10];//An array to hold the details of each route

    printf("\nNumber of routes is %d\n", num_routes);

    struct route r[num_routes];//An array of structures of type route (This line causes the error)

    fflush(stdin);

    for (x = num_routes; x > 0; x--) {
         printf("\nEnter the route number: ");
         scanf("%s", r[x].route_num);
         printf("Route number is %s", r[x].route_num);


         printf("\nEnter the route source: ");
         fflush(stdin);
         scanf("%s", r[x].source);
         printf("Source = %s", r[x].source);


         printf("\nEnter the route destination: ");
         fflush(stdin);
         gets(r[x].destination);
         printf("Destination = %s", r[x].destination);

         printf("\nEnter the number of buses that use this route: ");
         scanf("%d", &r[x].num_of_buses);
         printf("Number of buses = %d", r[x].num_of_buses);


    }

    for (x = num_routes; x > 0; x--) {
        printf("\n\n+++Routes' Details+++\nRoute number = %s, Source = %s, Destination = %s, Number of buses for this route = %d\n", r[x].route_num, r[x].source, r[x].destination, r[x].num_of_buses);
    }

}
4

3 に答える 3

5

の宣言が不完全なため、エラー メッセージが表示されますstruct route。つまり、どこかに次のような行があります

struct route;

構造体の内容は指定されていません。これは完全に合法であり、コンパイラは構造体の内容を知る前にその構造体が存在することを知ることができます。これによりstruct route、不透明な型と前方宣言の型の項目へのポインターを定義できます。

ただし、配列に必要なメモリ量を計算し、インデックスからのオフセットを計算するには、構造体のサイズを知る必要があるため、コンパイラは配列の要素として不完全な型を使用できません。

ルート構造体を定義するヘッダーを含めるのを忘れていると思います。また、Ubuntu のstruct routeライブラリにはすでに不透明な型が呼び出されている可能性があるため、衝突を避けるために構造体の名前を変更する必要がある場合があります。

于 2012-05-01T09:40:25.483 に答える
2

を定義するヘッダー ファイルをインクルードする必要がありますstruct route
これがどのヘッダーかはわかりません。Linux と Windows で異なる可能性があります。

Linux では、必要なものである可能性がある をnet/route.h定義しstruct rtentryます。

于 2012-05-01T08:40:09.910 に答える
0

私の知る限り、C (少なくとも GCC では許可されません) では変数を配列インデックスとして使用できません。そのため、そのエラーが発生しています。代わりに定数を試してください。

行は多次元配列では補数ではないため、多次元配列では発生しませんが、単一次元配列の場合、配列インデックスは変数でなければなりません。

一部のコンパイラでは、このような動作が許可されているため、Windows でエラーが発生しません。

于 2012-05-01T08:36:40.483 に答える