構造体の配列--[エラー] '['トークンの前に一次式があることが予想される
<スパン 時間節約ヘルパー : 構造体配列のアクセス、代入などのエラー報告についてです。Error] expected primary-expression before '[' tokenが報告された原因です。[Error] expected primary-expression before '[' token.
構造体の配列に値を代入する際に発生するコンパイルエラーは、本当は基本的な概念に過ぎないのですが、Baiduを開いて検索すると、ヘッダーなどに関する複雑な記述がたくさん出てくるので、慣れるまで大変でした。そこで、問題を再掲してみました。
理由:typedef 構造体の中で、配列 stu[10] はエイリアスとして扱われるため。
回避策 typedefを削除するか、以下の方法で構造体の配列を定義してください。
<スパン 詳細
主な理由は、やはり構造体型に不慣れなことです。
最初の定義方法(学生専用の情報テーブルを作る場合)。
struct student
{
long stuid;
char name[10];
int age;
int score;
}stu[10];
stu[1].stuid=1; //This way you can assign values to the elements in the array, simply written like this.
for(int i=0;i<10;i++) //Input assignment to the defined array of structs
{
scanf("%d %c%d%d",&stu[i].stuid,&stu[i].name,&stu[i].age,&stu[i].score);
}
2つ目の定義方法(生徒用と先生用の情報シートを作成する場合)。
typedef struct infomation
{
long stuid;
char name[10];
int age;
int score;
}infor; // alias, if you don't add typedef, then the meaning is "infor is a structure variable"
infor student[40]; //assume 40 students and 5 teachers, so that everyone's information can be set.
infor teacher[5];
別の書き方で書く を使えば、より明確に見ることができます。
struct infomation //information is the name of the structure, also called the "label" of the structure
{
long stuid;
char name[10];
int age;
int score; //member of the structure
};
struct infomation student[40]; //structure variable
struct infomation teacher[5];
間違った書き方
この定義方法では,構造体型を定義する際に,すでに構造体変数を infor として定義しています.この場合、名前情報を持つ構造体型(構造体テンプレート)は、使用できる変数が infor の1つだけです。そのため、inforの後にstudent変数を追加すると、この時点ではinforの後に追加できるのはメンバー名だけなので、エラーを報告することになります。そして、最初の文にある typedef を追加する場合、infor は information の別名です。
キーワード typedef は、すでに存在するデータ型の別名を定義する。
データ型は、以下のように分けられます。 基本データ型 と カスタム)データ型の構築 (他にもいろいろな名称があります)。
基本的なデータ型は、int , float , double , void , char の5つです。
構成要素:構造体型、配列型、ポインタ型、列挙型、共有型、など。
多くの記事やビデオで、仕様書では3つの定義方法が示されていますが、struct型、structタグ、structメンバ、struct変数、typedefの役割を理解すれば、それらを覚える必要は全くありません。
(ご批判をお願いします)
関連
-
_CRT_SECURE_NO_WARNINGS エラーメッセージ、解決方法
-
C 構造体定義エラー: '['トークンの前に一次式があることが予想される
-
g++が内部・外部コマンドソリューションとして認識されない、MinGWを初めて使うときの落とし穴
-
libc++abi.dylib: NSException タイプの捕捉されない例外で終了するエラー
-
[C] Error [Error] 代入の左オペランドとして lvalue が必要です。
-
警告:代入がキャストなしで整数からポインタを作成する場合の修正方法に関する警告
-
VSCodeでCプログラムを書くとエラーになる:ソースファイル "stdio.h" を開くことができない
-
Solve Dev-c++ [エラー] 'for' ループの初期宣言は、C99 または C11 モードでのみ許可されます。
-
未定義の `__isoc99_sscanf' への参照
-
C - 添え字の値が配列でもポインタでもベクトルでもないエラー
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
解決済み] g++ コンパイルエラー: ')'トークンの前に一次式があることが予想される
-
error: '.' トークンの前にunqualified-idを指定する必要があります。
-
[C] レポートエラー 代入の左オペランドとしてlvalueが必要
-
Cエラー [エラー] 代入_Ashesの左オペランドにlvalueが必要です-プログラマーズ・シークレット
-
赤線の位置は必ずしも間違っていない:式は変更可能なlvalueでなければならないエラーは、この文とは別の場所に存在する可能性があります。
-
#137: 式は変更可能なlvalueでなければならない問題 // 文字列配列の代入問題
-
ポインタ定数および定数ポインタ
-
C 言語のポインタ配列のポインタ型、ポインタに値を割り当てるために配列名を使用、コンパイル時の警告:互換性のないポインタ型からの初期化
-
C/C++の再定義
-
コンパイルエラー:可変長オブジェクトが初期化されていない可能性があります。