Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 结构中的结构_C++_Arrays_Struct - Fatal编程技术网

C++ 结构中的结构

C++ 结构中的结构,c++,arrays,struct,C++,Arrays,Struct,我有一个结构 struct Course{ int cId; string courseName; }; 我想为每门课程增加学生。我想在struct课程中定义另一个struct,如 struct Course{ int cId; string courseName; struct Student{ int sId; string studentName; }; }; 如果我像这样定义struc

我有一个结构

struct Course{
  int cId;
  string courseName;
};
我想为每门课程增加学生。我想在struct课程中定义另一个struct,如

struct Course{
      int cId;
      string courseName;
      struct Student{
         int sId;
         string studentName;
      };
    };
如果我像这样定义struct,我怎么能使用它呢?我有
课程*cptr=新课程[1]
用于使用struct课程。

如何将学生添加到指定的cId?

您的
课程
不包含
学生
。它只定义了该名称的结构,即类型
Course::Student
。要使一个类型包含另一个类型的实例,只需声明一个成员变量:

struct Student { .... };

struct Course
{
  ....
  Student student;
};
如果您希望每门课程容纳多个
学生
,则可以使用容器。在缺乏更多信息的情况下,最好的候选方法是
std::vector

struct Course
{
  ....
  std::vector<Student> students;
};
struct课程
{
....
性病:病媒学生;
};

您的
课程
不包含
学生
。它只定义了该名称的结构,即类型
Course::Student
。要使一个类型包含另一个类型的实例,只需声明一个成员变量:

struct Student { .... };

struct Course
{
  ....
  Student student;
};
如果您希望每门课程容纳多个
学生
,则可以使用容器。在缺乏更多信息的情况下,最好的候选方法是
std::vector

struct Course
{
  ....
  std::vector<Student> students;
};
struct课程
{
....
性病:病媒学生;
};

std::vector
是您的朋友,但如果不允许您使用,您可以:

struct Student {...}; // Implementation omitted for brevity...

struct Course
{
  Student *students_; // Use students_=new Student[num_students]; to allocate
                      // memory dynamically
};

std::vector
是您的朋友,但如果不允许您使用,您可以:

struct Student {...}; // Implementation omitted for brevity...

struct Course
{
  Student *students_; // Use students_=new Student[num_students]; to allocate
                      // memory dynamically
};
这定义了一个结构
课程
和另一个结构
课程::学生
,但是
课程
没有实例化任何学生(没有
课程
的成员具有类型
学生
)。当然,如果你想让学生成为会员,你需要这样的东西:

struct Course
{
    // ...
    struct Student
    {
        int sId;
        string studentName;
    } student;
};

将单个学生或10名学生的数组分别定义为
课程
的成员。(注意:
std::vector
比静态大小的数组更好)

或者,您可以将
学生
声明为
课程
之外的结构:

struct Student { ... };

struct Course
{
    // ...
    Student student;
    // or std::vector<Student> students;
    // or std::array<Student, 10> students;
    // or Student* students
};
struct Student{…};
结构课程
{
// ...
学生;
//或性病媒学生;
//或学生;
//还是学生
};
这定义了一个结构
课程
和另一个结构
课程::学生
,但是
课程
没有实例化任何学生(没有
课程
的成员具有类型
学生
)。当然,如果你想让学生成为会员,你需要这样的东西:

struct Course
{
    // ...
    struct Student
    {
        int sId;
        string studentName;
    } student;
};

将单个学生或10名学生的数组分别定义为
课程
的成员。(注意:
std::vector
比静态大小的数组更好)

或者,您可以将
学生
声明为
课程
之外的结构:

struct Student { ... };

struct Course
{
    // ...
    Student student;
    // or std::vector<Student> students;
    // or std::array<Student, 10> students;
    // or Student* students
};
struct Student{…};
结构课程
{
// ...
学生;
//或性病媒学生;
//或学生;
//还是学生
};
一个非常简单的方法:

struct Student
{
    int sId;
    string studentName;
};

struct Course
{
    int cId;
    string courseName;
    std::vector <Student> students;
};
一个非常简单的方法:

struct Student
{
    int sId;
    string studentName;
};

struct Course
{
    int cId;
    string courseName;
    std::vector <Student> students;
};


我希望您将这个结构分为两个单独的结构。然后可以在课程结构中初始化学生对象。或者你可以在课程结构中实现一个函数来链接学生结构。

我希望你把这个结构分成两个单独的结构。然后可以在课程结构中初始化学生对象。或者你可以在课程结构中实现一个函数来链接学生结构。

嵌套结构?为什么?有什么好的理由这样做吗?为你在另一个结构中声明的
struct
添加一个成员。你应该在他们授课时上课arrays@MichaelGoldshteyn:当他们教授标准容器时,你应该参加课程。@phresnel,如果你读了原始海报上对答案的评论,你会发现没有这样的课程!嵌套结构?为什么?有什么好的理由这样做吗?为你在另一个结构中声明的
struct
添加一个成员。你应该在他们授课时上课arrays@MichaelGoldshteyn:当他们教授标准容器时,你应该参加课程。@phresnel,如果你读了原始海报上对答案的评论,你会发现没有这样的课程!但是学生的数量可以改变执行,所以我应该动态分配内存。我怎么能这么做?您可以使用一个指针,并使用
new[]
(以及使用
delete[]
取消分配)来分配它,而不是使用student[10]?@mxyz。如果这是您的要求,我最后一个示例中的最后一个
//或
将是您需要使用的方法-如果您不允许使用
std::vector
。例如,我有指定课程的cptr[1]。如果我想将学生添加到此课程中,我如何使用stedents?假设
cptr[1]
课程的一个实例
,类似于
cptr[1]。学生=新学生[SIZE];cptr[1]。学生[0]。sId=SOMEIDnew[]
(以及使用
delete[]
取消分配)来分配它,而不是使用student[10]?@mxyz。如果这是您的要求,我最后一个示例中的最后一个
//或
将是您需要使用的方法-如果您不允许使用
std::vector
。例如,我有指定课程的cptr[1]。如果我想将学生添加到此课程中,我如何使用stedents?假设
cptr[1]
课程的一个实例
,类似于
cptr[1]。学生=新学生[SIZE];cptr[1]。学生[0]。sId=SOMEID