Неполный тип недопустим в C ++ - PullRequest
1 голос
/ 07 мая 2020

Я пытаюсь воссоздать тип данных массива для экспериментальных целей. Я создал класс «узел» с двумя атрибутами value (int) и nextvalue (node) для хранения следующего узла. План состоял в том, чтобы связать несколько узловых объектов вместе и создать массив. вот мой код:

class node
{
public :int value;
        node nextnode;
};

Однако я получаю следующую ошибку в строке node nextnode;: неполный тип не допускается. Как будто это своего рода «рекурсивный класс», если он вообще существует.

Я даже попытался создать второй класс с именем «node2», который был бы таким же, как и предыдущий, чтобы обмануть компилятор int, думая, что класс не ссылается на себя. Есть решение или это тупик?

1 Ответ

0 голосов
/ 07 мая 2020

В отличие от других языков (например, C#) класс всегда является типом значения, а не ссылкой. Таким образом, класс не может иметь члена типа того же класса (вы получите бесконечную рекурсию и класс с бесконечным размером). Также обратите внимание, что в C ++ класс и структура идентичны (за исключением модификатора доступа по умолчанию)

Поэтому вам нужно использовать указатели:

#include <memory>

class node
{
public:
    int value;
    std::unique_ptr<node> nextnode;
};
...