Структура для хранения данных того же типа структуры - PullRequest
1 голос
/ 07 апреля 2019

Я пытаюсь создать структуру, которая должна содержать данные того же типа структуры.Возможно ли это?

Я могу определить указатель на объект того же типа, но не на саму структуру.

struct Node
{
    vector<string> state;
    struct Node *prev;
    int id;
    Node()
    {
    }

    ~Node()
    {
    }
};

Это возможно.Но я не могу определить, как показано ниже.При выполнении выдается ошибка, в которой говорится, что «неполный тип не разрешен».

struct Node
{
    vector<string> state;
    struct Node prev;
    int id;
    Node()
    {
    }

    ~Node()
    {
    }
};

Возможно ли это?Если да, что я должен сделать, чтобы избавиться от ошибки?

Я видел, что это возможно в Java с использованием классов,

public class Vertex implements Comparable{

    public Pallet[] bins;
    public int cost;
    public Vertex parent;
}

Спасибо

1 Ответ

1 голос
/ 07 апреля 2019

Нет.

struct Node
{
    vector<string> state;
    struct Node prev;
    int id;
    Node()
    {
    }

    ~Node()
    {
    }
};

Этот код не работает, так как тип Node не знает, сколько места нужно выделить для объекта типа Node.Тип все еще находится в процессе определения.Поэтому он еще не знает.

Но я могу сделать это с помощью указателя!?

Да.Указатель содержит не объект, а место в памяти объекта.Компилятор знает, что Node - это тип данных, но ему не нужно знать, сколько выделять, поскольку выделение будет сделано позже.

Но я могу сделать это на Java!?

Ссылки в Java НЕ совпадают с указателями C ++ ( В чем разница между указателем и ссылочной переменной в Java? ).Но для многих целей вы можете думать о них как об одном и том же.Помните, что когда вы создаете член в классе Java, вы создаете ссылку.( Как класс может иметь член своего собственного типа, разве это не бесконечная рекурсия? ).Ссылка Java будет ссылаться (указывать) на фактический объект.Член "parent" в вашем Java-классе - это не сам объект, а ссылка на объект.Точно так же, как «* prev» в вашем классе C ++ не является объектом, но указывает на местоположение объекта.

...