2016-04-22 7 views
1

で働いていないSTRUCT:機能typedefが、私はタイプstructのtypedefをを使用してタイプを定義したVS2015

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

EDIT:これがないWindows上ではなく、GCCを使用してLinuxに取り組んでいる( はここで完全なコードスニペットですVS2015) ここは簡単です。 Code Snippet

+0

1.一度 'typedef'edを' struct'する必要はありません。 2.ライン#160はどちらのラインですか? 3.関数を削除(コメント)するとエラーが消えますか? 4. 'c.type = LVAL_NUM;'行にコメントするとうまくいきますか? –

+0

これは行番号160です。 'v.num = x;' –

+0

enumsの前には何かありますか?いくつかのヘッダファイルが含まれていますか?私は標準が含まれていないことを意味する。 – LPs

答えて

1

あなたのコードにはエラーがないので、エラーはの前にこのコードの前にある必要があります。おそらくもう1つは未完成の{、または紛失した;です。

注:構文エラーの「回避策」はありません。構文エラーを修正する必要があります。不幸にもコンパイラは、実際のエラーがどこで発生したのかが非常に不明瞭で、どこが混乱しているかだけを伝えます。

+0

いいえ!これはできません。なぜなら、これらのエラーが宣言時、宣言時、または宣言後に現れているからです。これまでにない。 –

+0

@SaifAliしかし、最後の '{'がコード化されているコードの最後の部分では、終了していない '{'の問題が引き起こされます。ポールの答えはもっともらしい。 – LPs

+0

それは問題ではありません。コンパイラは何かを解析中で、 '{'以外の何かを期待しているところに来ます。コードブロックをコンパイルしようとしましたが、 'x'は関数宣言の解析を完了していないので宣言されていません。私が言ったように "comilersは不明確です..." –

-1

ヘッダファイルstdio.hとmain()を追加したとき。コンパイルされました

関連する問題