Я пытаюсь создать структуру, которая должна содержать данные одного и того же типа структуры. Это возможно?
Я могу определить указатель на объект того же типа, но не саму структуру.
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;
}
Спасибо
Возможный дубликат «Неполный тип» в классе, который имеет член того же типа, что и сам класс
@Yunnosch Я понял, но я видел, что это возможно в Java с классами. Пожалуйста, смотрите обновленный вопрос.
Нет.
struct Node
{
vector<string> state;
struct Node prev;
int id;
Node()
{
}
~Node()
{
}
};
Этот код не работает, потому что тип Node не знает, сколько места выделить для объекта типа Node. Тип все еще находится в процессе определения. Поэтому пока не знает.
Но я могу сделать это с указателем!?
да. Указатель содержит не объект, а местонахождение объекта в памяти. Компилятор знает, что Node — это тип данных, но ему не нужно знать, сколько нужно выделить, так как выделение будет сделано вручную позже.
Но я могу сделать это на Java!?
Ссылки в Java НЕ совпадают с указателями C++ (В чем разница между указателем и ссылочной переменной в Java? ). Но для многих целей вы можете думать о них как об одном и том же. Помните, что когда вы создаете элемент в классе Java, вы создаете ссылку. (Как класс может иметь член своего собственного типа, разве это не бесконечная рекурсия?). Ссылка Java будет ссылаться (указывать) на фактический объект. Родительский член в вашем классе Java - это не сам объект, а ссылка на объект. Точно так же, как "*prev" в вашем классе C++ не является объектом, а указывает на местоположение объекта.
Член того же типа будет содержать член того же типа, который содержит член того же типа, не так ли? Чем бы это закончилось, по-вашему?