Как использовать typedef рекурсивно? - PullRequest
2 голосов
/ 04 марта 2020

Я хочу написать программу о курсах, которые человек может проходить каждый семестр. Я хочу определить тип данных с именем CourseTable, который является вектором структуры с именем Course, но в этой структуре у меня также есть переменная «prerequisites», тип которой Я решил быть CourseTable.

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

Я получаю ошибку компиляции в любом порядке, я помещаю эти два объявления. У вас есть предложения, что мне делать?

Ответы [ 2 ]

5 голосов
/ 04 марта 2020

Попробуйте разместить псевдоним внутри структуры:

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

Однако, больше C ++ - i sh решение будет использовать using ключевое слово для псевдонимов типа:

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

или форвард объявить struct Course как:

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

struct Course {
    CourseTable prerequisites;
};
3 голосов
/ 04 марта 2020

Вам необходимо переслать декларацию Course до typedef vector<Course> CourseTable;. Это будет выглядеть как

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