3

C言語 structでのaの使用に問題があります。 とても不思議です!!! structでstruct を使用できません。 以前に定義しましたが...なぜですか?

coursestudent

struct course
{
    int no;
    char name[30];
    int credits;
    float score;
};

struct student   
{
int no;
char name[50];
course c[3];
};

私の言語はc ++ではなくcです

4

6 に答える 6

8

C++ と C の違いの 1 つは、 C++ 型を使用する場合、 classandなどの型キーワードを省略できることstructです。

問題は行course c[3];です。それを機能させるには、次の 2 つの選択肢がありますstruct course

typedef struct _course  // added an _ here; or we could omit _course entirely.
{
    int no;
    char name[30];
    int credits;
    float score;
} course;

structまたは、破線の前にキーワードを追加できます。structcourse c[3];

于 2012-06-22T17:45:36.867 に答える
4

struct構造体名の前にキーワードを付ける必要があります。

struct course
{
    int no;
    char name[30];
    int credits;
    float score;
};

struct student   
{
    int no;
    char name[50];
    struct course c[3];
};
于 2012-06-22T17:44:06.810 に答える
3
struct course c[3]; 

動作するはずです...

于 2012-06-22T17:43:19.587 に答える
2
struct student {
    /* ... */
    struct course c[3];
}

また

typedef struct _course {
    /* ... */
} course;

struct student {
    /* ... */
    course c[3];
}
于 2012-06-22T17:46:07.683 に答える
1

実際には匿名構造体を定義してから、それを typedef できるはずです。

typedef struct {
    /* stuff */
} course;

あとは、他の方が仰る通り、

struct student {
    course c[3];
}
于 2012-06-22T17:52:40.757 に答える
0

typedef は、宣言を短縮できるため、常に単語を入力する必要がないため便利ですstruct

これは、構造体の型定義を含む例です。また、学生構造体にはコース構造体も含まれています。

#include <stdio.h>
#include <string.h>

typedef struct course_s
{
    int no;
    char name[30];
    int credits;
    float score;
} course;

typedef struct student_s   
{
int no;
char name[50];
course c[3];
} student;

bool isNonZero(const int x);

int main(int argc, char *argv[])
{
    int rc = 0;

    student my_student;
    my_student.c[0].no = 1;

    return rc;
}
于 2012-06-22T23:14:08.397 に答える