поле имеет неполный тип C

#c #class

#c #класс

Вопрос:

Я пытаюсь создать класс, у которого есть член типа его окружающего класса, но я получаю сообщение об ошибке, в котором говорится, что поле имеет неполный тип. вот пример

 class List {
public:
        List (int element, List rest) {
                 _first = element;
                 _rest = rest;
         }
.
.
.
}
  

Есть ли способ исправить эту проблему?

Комментарии:

1. Как _rest объявляется?

Ответ №1:

Вы не дали нам полного определения List , но я предполагаю из вашего описания, что у вас есть что-то вроде:

 class List
{
    ...
    List _rest;
};
  

Очевидно, что это невозможно. Объект не может содержать элемент своего собственного типа, так как это привело бы к бесконечной рекурсии!

Возможно, вам нужен элемент, который является указателем или ссылкой?

Комментарии:

1. Ну, я не знаю, насколько это «очевидно», не похоже, что это невыполнимая задача, и множество языков с многоходовыми компиляторами допускают такую вещь.

2. @Ed — Это не имеет никакого отношения к многопроходности, но к тому, как вы храните данные. Каким был бы размер списка с внутренним списком с внутренним списком с внутренним…

3. @Bo Persson: Вы правы, это не имеет никакого отношения к многопроходности, поэтому элемент, очевидно, должен (как указано) быть указателем. Я думал, что удалил этот комментарий…

Ответ №2:

Используйте это:

'rest' должен быть указатель на List .