Вы делаете это правильно, но компилятор вправе жаловаться: вы назначаете «указатель на const Node
» на переменную с типом «указатель на неконстантный Node
»,Если позже вы измените this->next
, вы нарушаете контракт: «Я не буду изменять переменную, на которую указывает next
.
Простое исправление - просто объявить next
как указатель на не-const data. Если переменная this->next
действительно никогда не будет изменена в течение срока службы объекта Node
, то вы можете альтернативно объявить член класса указателем на const
объект:
class Node
{
...
const Node *next;
}:
Также обратите внимание на различие между «указателем на const
данные» и «const
указателем на данные». Для одноуровневых указателей существует 4 типа указателей в отношении их const
сущности:
Node *ptr; // Non-constant pointer to non-constant data
Node *const ptr; // Constant pointer to non-constant data
const Node *ptr; // Non-constant pointer to constant data
Node const *ptr; // Same as above
const Node *const ptr; // Constant pointer to constant data
Node const *const ptr; // Same as above
Обратите внимание, что const Node
- это то же самое, что и Node const
на последнем уровне, но размещение const
относительно объявления указателя ("*
") очень важно.