如何递归使用typedef?

时间:2020-03-04 14:10:42

标签: c++ c++11 typedef

我想编写一个关于一个人每学期可以学习的课程的程序。我想定义一个称为CourseTable的数据类型,它是名为Course的结构的向量,但是在此结构中我还有一个“ prerequisites”变量,其类型我决定成为CourseTable。

typedef vector<Course> CourseTable ;
struct Course
{
  ....
  CourseTable prerequisites;
};

我将这两个声明放在任何一个顺序中都会出现编译错误。您对我应该做什么有任何建议?

2 个答案:

答案 0 :(得分:5)

尝试在结构内放置别名:

struct Course {
    typedef std::vector<Course> CourseTable;
    CourseTable prerequisites;
};

但是,更多的C ++解决方案是将using关键字用作类型别名:

struct Course {
    using CourseTable = std::vector<Course>;
    CourseTable prerequisites;
};

或像下面这样向前声明struct Course

struct Course;
using CourseTable = std::vector<Course>;

struct Course {
    CourseTable prerequisites;
};

答案 1 :(得分:3)

您需要在Course之前转发声明typedef vector<Course> CourseTable;。看起来像

struct Course;
typedef vector<Course> CourseTable;
struct Course
{
    CourseTable prerequisites;
};