2016-04-22 59 views
1

工作我定義使用的typedef類型結構的一個類型:功能的返回類型typedef結構未在VS2015

// Declate a new struct LVAL 
typedef struct { 
    int type; 
    long num; 
    int err; 
} lval; 

,然後試圖使用返回類型lval中(如上所述使用的typedef創建)聲明函數:

// Create a new number type lval 
lval lval_num(long x) 
{ 
    lval v; 
    v.type = LVAL_NUM; 
    v.num = x; 
    return v; 
} 

但是Visual Studio的2015年,不編譯它,顯示沒有錯誤,只是這兩個:

Error C2143 syntax error: missing ';' before '{' 
Error C2065 'x': undeclared identifier 

任何人都可以發現錯誤/錯誤?我嘗試了谷歌搜索和其他解決方法沒有任何工作。 下面是完整的代碼片段:

// Create enumerations of possible lval struct types 
enum { LVAL_NUM, LVAL_ERR }; 

// Create enumerations of possible lval error types. 
enum { LERR_DIV_ZERO, LERR_BAD_OP, LERR_BAD_NUM }; 

// Declate a new struct LVAL 
typedef struct { 
    int type; 
    long num; 
    int err; 
} lval; 

// Create a new number type lval 
lval lval_num(long x) 
{ 
    lval v; 
    v.type = LVAL_NUM; 
    v.num = x; 
    return v; 
} 

我想聲明的功能,因爲這太多,但沒有奏效:

struct lval lval_num(long x) 
{ 
    lval v; 
    v.type = LVAL_NUM; 
    v.num = x; 
    return v; 
} 

編輯:這是工作在Linux上使用GCC,但Windows( VS2015) 儘管如此, Code Snippet

+0

1.你不需要'結構'一次typedef'ed。 2.哪一行是#160行? 3.刪除(註釋)功能後,錯誤消失了嗎? 4.如果你註釋行'c.type = LVAL_NUM;''它會起作用嗎? –

+0

這是行#160 'v.num = x;' –

+0

在枚舉之前有什麼東西嗎?是否包含一些頭文件?我的意思是沒有標準包含。 – LPs

回答

1

我看到你的代碼沒有錯誤,所以錯誤必須是之前這段代碼。可能是另一個未終止的{或缺少;

注意:語法錯誤沒有「解決方法」。您必須修復語法錯誤。令人遺憾的編譯器可能會非常不清楚遇到實際錯誤的位置,只會告訴你它在哪裏混淆。

+0

不!這不可能,因爲這些錯誤的行號在彈出,在聲明之後或之後彈出。之前沒有。 –

+0

@SaifAli但是沒有終止的'{'的問題在代碼的最後一部分被觸發,其中最後一個'{'被編碼。保羅的回答是合理的。 – LPs

+0

沒關係。編譯器正在解析某些東西,並且正處於期望別人不是'{'的地方。它現在試圖編譯一個代碼塊,但發現'x'未聲明,因爲它尚未完成解析函數聲明。正如我所說的「comilers不清楚... ...」 –

-1

當我添加頭文件stdio.h和main()。它得到了編譯