3

struct我在C语言 中使用 a 时遇到问题。
这很奇怪!
我不能course在结构中使用student结构。
我之前已经定义过了,但是……为什么?

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

classC++ 和 C 之间的区别之一是您可以省略类型关键字,例如struct在使用 C++ 类型时。

问题是线路course c[3];。为了让它工作,你有两个选择——你可以在你的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 回答