"невозможно преобразовать 'SinglyLinkedList<int>:: node *' в 'int*', когда компиляция назначения прекращена из-за -Wfatal-errors."
Ошибка
t.cpp: В конструкторе 'SinglyLinkedList::SinglyLinkedList(T*, size_t) [с T = int]': t.cpp:29: создается здесь Строка 51: ошибка: невозможно преобразовать 'SinglyLinkedList::node*' в 'int*'в компиляции присваивания прекращено из-за -Wfatal-ошибок.
в строке, показанной ниже
node * lastNode = new node;
lastNode->val = *arr;
lastNode->next = NULL;
for (T * pa(arr+1), * pb(arr+n); pa != pb; ++pa)
{
node * thisNode = new node;
thisNode->val = *pa;
thisNode->next = NULL;
lastNode->next = thisNode; // error
lastNode = thisNode;
delete thisNode;
}
Полный код здесь: http://codepad.org/gZ2KnrUM
Не могу понять, что синтаксически неверно в этой строке.
Бонусный вопрос: есть ли способ кратковременной инициализации struct
с new
? Я хочу быть в состоянии сделать такие строки, как
node * lastNode = new node;
lastNode->val = *arr;
lastNode->next = NULL;
в одну строку, если это возможно. Я знаю, что если бы я создал его в стеке, то я мог бы сделать
node lastNode = { *arr, NULL m};
но есть ли эквивалентная инициализация скобки для создания с new
?
2 ответа
Вы пытаетесь назначить тип node *
к переменной типа int *
,
Ваш код узла для узла должен быть:
struct node
{
T val;
node * next;
};
Что касается "краткой инициализации", я бы просто использовал конструктор.
class node
{
T val;
node * next;
public:
node(T val, node * next)
: this->val(val)
, this->next(next)
{};
};
node * lastNode = new node(*arr, nullptr);
Или инициализатор C++11:
node * lastNode = new node { *arr, nullptr };
Ошибка на линии
lastNode->next = thisNode;
и ошибка в том, что
cannot convert 'SinglyLinkedList::node*' to 'int*' in assignment
я могу увидеть это thisNode
имеет тип node*
и из сообщения об ошибке я заключаю, что next
является переменной-членом типа int*
,
Таким образом, либо это объявление неверно, либо ваша идея присвоения node*
в next
плохо продуман.
Что касается вашего второго вопроса (который на самом деле должен быть другим вопросом, а не задавать два вопроса одновременно), вы можете либо дать своей структуре конструктор, либо обновить ее до C++11
и делать new node{*arr, nullptr}
,