2016-06-23 50 views
1

の内側に私は*以下(のconst char型)で始まる行でエラー期待指定子修飾子リストのエラーは、構造体

error: expected specifier-qualifier-list before ‘(’ token

を取得していますし、私はこのエラーは何を意味するのか理解していません。どういう意味ですか? (このトピックに関する別の質問があることに注意してください、それ以外の問題の答えは一つではエラーが何を意味するのか説明していません。)

#include "stddef.h"  /* size_t */ 

typedef struct { 
    size_t size; 
    (const char)* strings[]; 
} STRLIST; 

static STRLIST listMediaType = { 
    7, 
    { 
     "Book", 
     "Map", 
     "Booklet", 
     "Pamphlet", 
     "Magazine", 
     "Report", 
     "Journal" 
    } 
}; 
+0

@ user3386109はい、それがなかったが、どのように私は、エラーメッセージを理解することができます。言い換えれば、なぜこの特定のエラーメッセージがここで発生しますか? –

答えて

0

この特定のエラーメッセージがタイプ+修飾子の周りに余分な括弧によるものですIE余分な括弧はconst charです。

余分な括弧を削除すると、すべてのエラーが消えます。

listMediaTypeが定義されていても使用されていないという警告が表示されます。

1

括弧を削除することで、問題をソートすることができます。これは、ソートのです。C仕様では、イニシャライザリストを持つ柔軟な配列メンバの初期化が禁止されているため、この問題を修正しています。しかし、clang(と私はgccを想定しています)では拡張子として使用できます。 -Weverythingでコンパイルすると、拡張機能を使用しているという警告が表示されます。本当にあなたは、38ページの長さの仕様、セクションに「6.7宣言」を読む必要があることを理解する:括弧が許可されていない理由については

。短い答えは、コンパイラが宣言を期待していたことです。宣言はさまざまな指定子と修飾子で始まりますが、いずれも括弧で始まらないものです。

だから(ビューのコンパイラの視点からの)エラーメッセージの適切な解釈は次のとおりです。

"I was expecting the declaration of a structure member, which should start with a specifier or qualifier, but instead you gave me a parentheses. Don't do that."

関連する問題