Error C: array type has an incomplete element type

I am trying to compile a program in Ubuntu 11.04 that works well on Windows, but it gives the above error. I added a comment to the line that causes the error. Here is the code:

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

}
+3
source share
3 answers

The error message is caused because you have an incomplete ad struct route. that is, somewhere you have a line that says

struct route;

without indicating what is in the structure. This is completely legal and allows the compiler to know what structure exists before it finds out what is in it. This allows you to define pointers to type elements struct routefor opaque types and for forward declarations.

, , , , .

, , . , , Ubuntu struct route , , , , .

+5

, struct route.
, , Linux Windows.

Linux net/route.h struct rtentry, , .

+2

, C ( , GCC ) , . .

This does not happen with multidimensional arrays because the string is not complicated in multiple arrays, but in the case of a single array, the array must be a variable.

Some compilers allow this behavior, why it does not cause errors in windows.

0
source

All Articles