2016-03-06 1 views
1

Не было бы таким же, чтобы иметь встроенный объект той же структуры, который не является указателем?Почему следующий узел Struct * работает для связанного списка в C++?

Struct Node 
{ 
int data; 
Node next; 
}; 
//vs 
Struct Node 
{ 
int data; 
Node * next; 
}; 
+0

Вы пришли на C++ из Python или Java? – vz0

+3

Если у вас есть дом, можете ли вы вставить другой подобный дом в этот дом? Нет. Но вы можете оставить записку в этом доме по адресу другого дома. – nos

+0

@nos: nice example Мне это нравится – Destructor

ответ

1

Нет!

Имея следующую структуру:

struct Node { 
    Node other; 
}; 

является незаконным! Node не имеет определенного размера; компилятор не может построить его правильно. A Node будет содержать Node, который будет содержать Node .. подождите, что?

Указатель, однако, хорош, он просто указывает на раздел памяти. При определении указателя тип, который он указывает, не обязательно должен быть завершен, он должен только определить.

struct Node; 

int main() { 
    Node* a; // Fine, no errors. 
    Node b; // Incomplete type error 
} 
Смежные вопросы