"cannot convert 'SinglyLinkedList<int>::node*' to 'int*' in assignment compilation terminated due to -Wfatal-errors."
"cannot convert 'SinglyLinkedList<int>::node*' to 'int*' in assignment compilation terminated due to -Wfatal-errors."
错误
t.cpp: In constructor 'SinglyLinkedList::SinglyLinkedList(T*,
size_t) [with T = int]': t.cpp:29: instantiated from here Line 51:
error: cannot convert 'SinglyLinkedList::node*' to 'int*' in
assignment compilation terminated due to -Wfatal-errors.
在下面显示的行中
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
无法弄清楚该行的语法错误。
奖金问题:有没有一种方法可以用 new
简化 struct
的初始化?我希望能够制作像
这样的行
node * lastNode = new node;
lastNode->val = *arr;
lastNode->next = NULL;
如果可能的话,写成一行。我知道如果我在堆栈上创建它那么我可以做
node lastNode = { *arr, NULL m};
但是使用 new
创建是否有等效的大括号初始化?
您正在尝试将类型 node *
分配给类型 int *
的变量。
您的节点代码应该是:
struct node
{
T val;
node * next;
};
至于 "shorthand initialization" 我会使用构造函数。
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*
.[=20 类型的成员变量=]
因此,该声明是错误的,或者您将 node*
分配给 next
的想法是错误的。
关于你的第二个问题(这真的应该是一个不同的问题,而不是一次问两个问题),你可以给你的结构一个构造函数,或者升级到 C++11
并做 new node{*arr, nullptr}
.
错误
t.cpp: In constructor 'SinglyLinkedList::SinglyLinkedList(T*, size_t) [with T = int]': t.cpp:29: instantiated from here Line 51: error: cannot convert 'SinglyLinkedList::node*' to 'int*' in assignment compilation terminated due to -Wfatal-errors.
在下面显示的行中
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
无法弄清楚该行的语法错误。
奖金问题:有没有一种方法可以用 new
简化 struct
的初始化?我希望能够制作像
node * lastNode = new node;
lastNode->val = *arr;
lastNode->next = NULL;
如果可能的话,写成一行。我知道如果我在堆栈上创建它那么我可以做
node lastNode = { *arr, NULL m};
但是使用 new
创建是否有等效的大括号初始化?
您正在尝试将类型 node *
分配给类型 int *
的变量。
您的节点代码应该是:
struct node
{
T val;
node * next;
};
至于 "shorthand initialization" 我会使用构造函数。
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*
.[=20 类型的成员变量=]
因此,该声明是错误的,或者您将 node*
分配给 next
的想法是错误的。
关于你的第二个问题(这真的应该是一个不同的问题,而不是一次问两个问题),你可以给你的结构一个构造函数,或者升级到 C++11
并做 new node{*arr, nullptr}
.