1. We have moved from vBulletin to XenForo and you are viewing the site in the middle of the move. Though the functional aspect of everything is working fine, we are still working on other changes including the new design on Xenforo.
    Dismiss Notice

parse error before `{'

Discussion in 'C' started by justafisch, Mar 1, 2011.

  1. justafisch

    justafisch New Member

    I keep getting this error when I run this code with my makefile. I researched common reasons for parse errors and I can't see any reason I should be getting this error

    Code:
    #include "lab2-api.h"
    typedef struct CircularBuffer {
    int beingUsed;
    int capacity;
    int count;
    int head;
    int tail;
    char buffer[12];
    } CB;
    int
    main (int argc, char *argv[]){
    int counter = 0;
    CB *cb;
    uint32 handle;
    char removed = '_';
    handle = dstrtol(argv[1], NULL, 10);
    cb = (CB *)shmat(handle);
     
    While(counter != 11){
    if(cb->beingUsed == 0){
    cb->beingUsed = 1;
    if(cb->count != 0){
    removed = cb->buffer[cb->head];
    if(cb->head == 11){
    cb->head = 0;
    }
    else{
    cb->head++;
    }
    cb->count--;
    }
    cb->beingUsed = 0;
    if(removed != '_'){
    Printf("Consumer removed : %c", removed);
    removed = '_';
    counter++;
    }
    }
    }
    }
    Any help would be greatly appreciated.
    Note: I have a consumer class that uses pretty much the exact same code and doesn't experience this error.
     
    Last edited by a moderator: Mar 1, 2011
  2. justafisch

    justafisch New Member

    Btw, this is the exact error I am recieving

    consumer.c: In function `main':
    consumer.c:24: parse error before `{'
    consumer.c: At top level:
    consumer.c:47: parse error before `}'
    make: *** [consumer.o] Error 1
     
  3. xpi0t0s

    xpi0t0s Mentor

    While and Printf are invalid, unless redefined in lab2-api.h. Should be while and printf, because C++ is case sensitive.

    There is no line 47 in the above code, are you sure you've posted the whole thing? The final closing brace is on line 40.

    Are you using an integrated development environment whereby you can press a button with the cursor on an error and have it highlight the line it doesn't like? Or are these just stdout messages from command line tools? If the former, perhaps you could get the debugger to identify lines "24" and "47".
     
  4. xpi0t0s

    xpi0t0s Mentor

    And here's the code properly formatted, thanks to Notepad++. Please use code blocks and post correcly formatted code - makes it a lot easier to read.
    Code:
    #include "lab2-api.h"
    typedef struct CircularBuffer {
        int beingUsed;
        int capacity;
        int count;
        int head;
        int tail;
        char buffer[12];
    } CB;
    int
    main (int argc, char *argv[]){
        int counter = 0;
        CB *cb;
        uint32 handle;
        char removed = '_';
        handle = dstrtol(argv[1], NULL, 10);
        cb = (CB *)shmat(handle);
    
        While(counter != 11){
            if(cb->beingUsed == 0){
                cb->beingUsed = 1;
                if(cb->count != 0){
                    removed = cb->buffer[cb->head];
                    if(cb->head == 11){
                        cb->head = 0;
                    }
                    else{
                        cb->head++;
                    }
                    cb->count--;
                }
                cb->beingUsed = 0;
                if(removed != '_'){
                    Printf("Consumer removed : %c", removed);
                    removed = '_';
                    counter++;
                }
            }
        }
    }
    
     

Share This Page