结构内部的结构

时间:2013-11-18 15:25:46

标签: c++ arrays struct

我有结构

struct Course{
  int cId;
  string courseName;
};

我想为每门课程添加学生。我想在结构化课程中定义另一个结构,如

struct Course{
      int cId;
      string courseName;
      struct Student{
         int sId;
         string studentName;
      };
    };

如果我像这样定义struct我怎么能用呢?我有Course * cptr = new Course[1]; 哪个用于结构课程。 我怎样才能将学生添加到指定的cId?

5 个答案:

答案 0 :(得分:5)

您的Course不包含Student。它只定义了该名称的结构,即类型Course::Student。对于包含其他类型的实例的类型,您只需声明一个成员变量:

struct Student { .... };

struct Course
{
  ....
  Student student;
};

如果您希望每个课程容纳多个Student,那么您可以使用容器。在没有更多信息的情况下,最佳候选人是std::vector

struct Course
{
  ....
  std::vector<Student> students;
};

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

这定义了一个struct Course和另一个struct Course::Student,但是Course没有实例化任何学生(没有Course的成员{{1} }})。如果你希望学生成为课程的一员,你需要这样的东西:

Student

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

分别定义一名学生或一组10名学生作为struct Course { // ... struct Student { int sId; string studentName; } students[10]; }; 的成员。 (注意:Course将是一个比静态大小的数组更好的选择)

或者,您可以将std::vector声明为Student 之外的结构

Course

答案 3 :(得分:0)

一种非常简单的方法:

struct Student
{
    int sId;
    string studentName;
};

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

这样你可以写

Student s;
Course c;
c.students.push_back(s);

答案 4 :(得分:0)

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