I'm getting an ": error: expected expression before ‘{’ token"

Discussion in 'C' started by billy1, Aug 10, 2007.

  1. billy1

    billy1 New Member

    Joined:
    Aug 10, 2007
    Messages:
    3
    Likes Received:
    0
    Trophy Points:
    0
    Hi all,
    This is my simple ansi C code:
    Code:
       int         x, MAT[9]={};
       x = nodeinfo.nodenumber;
       switch(x) {   
            case '0':MAT[] = {1,1,2,1,0,0,0,0};       
                    break;
            case '1':MAT[] = {1,1,2,2,3,1,0,0};
                    break;
            case '2':MAT[] = {1,2,2,1,0,0,0,0};
                    break;
            default:printf("no node available\n");
         }
    
    But I'm getting this compiling error:

    xx.c:12: error: expected expression before ‘{’ token
    xx.c:13: error: expected expression before ‘{’ token


    Can you please let me know what is wrong?

    thanks.
     
  2. DaWei

    DaWei New Member

    Joined:
    Dec 6, 2006
    Messages:
    835
    Likes Received:
    5
    Trophy Points:
    0
    Occupation:
    Semi-retired EE
    Location:
    Texan now in Central NY
    Home Page:
    http://www.daweidesigns.com
    Well, in the first place, it isn't smaht to show a line number if you don't show enough code for us to count lines, or at least highlight the line as YOU know it. We're not sitting in your chair looking at your screen.

    Secondly, the construct, MAT[] = {1,1,2,1,0,0,0,0}; is not a workable runtime operation. It is only good at compile time, when the compiler does you a favor by converting it into an initialization sequence (which becomes a permanent part of the program prior to its conversion to actual executable code).

    In C/C++ arrays are not an atomic thing that can be assigned to in one swell foop. They are a collection of individual items that must be treated individually. Your code is NOT ansi C code, despite your claims to the contrary.
     
    Last edited: Aug 10, 2007
  3. billy1

    billy1 New Member

    Joined:
    Aug 10, 2007
    Messages:
    3
    Likes Received:
    0
    Trophy Points:
    0
    Thank you for you quick answer!
    But I still have some questions. Defenitly, I have a conceptual problem which is not described in my books.
    All what I did is in my C books (or at least that's what I underestand so far..)

    What I wanna do is just a switch or if loop wich -according with a variable I get (x)- then I set some values in an empty defined array.

    1 int x;
    2
    3 x = number; /*here "number" is an int which I get from another function*/
    4
    5 switch(x) {
    6 case 0: int MAT[]={1,2,3,4,5}; /*Initializing the content of an array when it is declared */
    7 break;
    8 case 1: int MAT[]={3,4,5,6,7};
    9 break;
    10 default: printf("none selected\n");
    11 }

    Here I'm getting an error in lines 6 and 8 saying:

    error: expected expression before '{' token
    error: expected expression before '{' token


    I've also tryied setting element by element as you suggested, but I get the same error en each line.

    I tried also using "if-else if" , but the same error message in each line!!

    Thanks for your help!!
     
  4. billy1

    billy1 New Member

    Joined:
    Aug 10, 2007
    Messages:
    3
    Likes Received:
    0
    Trophy Points:
    0
    :confused:
     
  5. DaWei

    DaWei New Member

    Joined:
    Dec 6, 2006
    Messages:
    835
    Likes Received:
    5
    Trophy Points:
    0
    Occupation:
    Semi-retired EE
    Location:
    Texan now in Central NY
    Home Page:
    http://www.daweidesigns.com
    Okay, listen up. You can't use that type of assignment at run time, only at compile time. The compiler can do that for you, just once, when you compile. The microprocessor cannot do that for you at run time, when it determines what the value of "x" is.

    Let me give you another example. You may put, at the top of your program, a statement like
    Code:
    char myText [] = "This is my text";
    
    That only works because the compiler writers are doing you a favor. You cannot assign a bunch of characters to an array in C/C++. You have to assign them one at a time. In the foregoing example, the compiler runs all the code necessary to assign the characters, individually. It then stores the result permanently, as a series of characters, in the executable file. When the program is launched that pattern is put into memory BEFORE the executive calls your "main" function. It is then there for your program to work with, as it runs. It is impossible for the compiler to know what "x" is before the program runs. It cannot, therefore, put "This is my text" and "That was my text" in the memory location which has been named "myText".

    I'm sorry if this is confusing to you. You will either have to take my word for it, or think about it, or back your *** off into assembly language and try to put two different values in the same variable at the same time. It ainna gonna woik, Bubba.
     
  6. Nognir

    Nognir New Member

    Joined:
    Jun 27, 2008
    Messages:
    2
    Likes Received:
    0
    Trophy Points:
    0
    Hey guys, I've got a similar problem here. I'm trying to make a program to calculate a polyonym but I'm getting an error. Here's the code:
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #define epsilon = 0.0001;
    
    int p_grade, p_2nd, p_1st, p_zero, i, *p;
    float x1,x2,x_0, err, x_mid;
    
    float force (float x, int y)
    {
    	int i, j=1;
    	for (i=1; i < y; i++) j*=x;
    	return j;
    }
    
    float f (int x)			/*Ορισμός συνάρτησης πολυωνύμου*/
    {
    	int i, j=0;
    	for (i=0; i<p_grade; i++)
    	j += p[i]*force(x, p_grade);
    	return j;
    }								/*Τέλος ορισμού*/
    float root (float a, float b)
    {
    	float f1, f_mid, x_mid, err;
    	f1 = f(a);
    	if (f(f1*(f(b)))>0) err = 1.0;
    		else
    			{
    				err = 0;
    				x_mid = (a+b)/2;
    				while (abs(a - x_mid) > epsilon)
    					{
    						f_mid = f(x_mid);
    						if ((f1 * f_mid) <= 0) b = x_mid;
    							else
    							{
    								a = x_mid; f1 = f_mid;
    							}
    						x_mid = (a+b)/2;
    					}
    			}	return x_mid;
    }
    void main()
    {
    	printf("ΒΑΘΜΟΣ ΠΟΛΥΩΝΥΜΟΥ?:");  scanf("%d", &p_grade);	/* Εισαγωγή των δεδομένων της άσκησης*/
    	p = (int *) malloc(p_grade * sizeof (int));
    	if (p == NULL)
    	    {
    	    
    	    }
    	else
    	    {
    	    
    	    }
    	for (i = p_grade; i >= 0; i--) {printf("ΣΥΝΤΕΛΕΣΤΗΣ ΟΡΟΥ i?:"); scanf("%d", &p[i]);}
    
    	printf("Η ΤΙΜΗ Χ1 είναι?:"); 	scanf("%f", &x1);
    	printf("Η ΤΙΜΗ Χ2 είναι?:"); 	scanf("%f", &x2); 	/*Τέλος της εισαγωγής*/
    	free(p);
    }
    
    I get that output:
    Code:
     gcc -O3 ask3.c
    ask3.c: In function ‘root’:
    ask3.c:31: error: expected expression before ‘=’ token
    ask3.c: In function ‘main’:
    ask3.c:44: warning: return type of ‘main’ is not ‘int’
    Any help here? I'd be grateful
     
  7. open_mind_core

    open_mind_core New Member

    Joined:
    Jun 29, 2008
    Messages:
    1
    Likes Received:
    0
    Trophy Points:
    0
    Your epsilon definition is wrong.

    it should be
    #define epsilon 0.0001,
    not
    #define epsilon = 0.0001;
     

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice