我创建了一个链接列表:struct Node和List Class,我在外面用我的main方法
#include "Lists.cpp"
#include <cstdlib>
using namespace std;
int main(){
Lists l = new Lists(1);
l.add(2);
l.add(3);
l.add(4);
l.add(5);
system("pause");
return 0;
}
但它会产生一个错误,指出“从List *到int的转换无效”。我使用外面的课吗?我有点困惑,我将如何解决这个问题。
#include <cstdlib>
#include <iostream>
using namespace std;
struct Node{
int data;
Node *next;
Node(int i){
data = i;
next = NULL;
}
};
class List{
Node *head;
public:
List(int i){
head = new Node(i);
}
void addToHead(int i){
Node *temp = new Node(i);
temp->next = head;
head = temp;
}
void add(int i){
Node *currNode = head;
while(currNode!= NULL){
if(currNode->next == NULL){
currNode->next = new Node(i);
break;
}
else{
currNode = currNode-> next;
}
}
}
void deleteNode(int i){
Node *currNode = head;
Node *prevNode = NULL;
while(currNode!= NULL){
if(currNode->data == i) {
if(prevNode== NULL){
head = head->next;
}
else{
prevNode->next = currNode->next;
}
}
prevNode = currNode;
currNode = currNode -> next;
}
}
void insert(int position, Node *n){
Node *currNode= head;
Node *prevNode = NULL;
for(int counter = 0; counter>= position && currNode!= NULL; counter++){
if(counter==position){
Node *temp = currNode;
n->next = currNode;
prevNode->next= n;
}
prevNode = currNode;
currNode = currNode-> next;
}
}
void traverse(Node *node){
if(node!=NULL){
cout<< node-> data <<endl;
traverse(node->next);
}
}
};
答案 0 :(得分:6)
Lists l = new Lists(1);
应该是:
Lists *l = new Lists(1);
new
提供指针。
您获得该特定错误的原因是,如果转化链Lists *
- &gt;该行有效int
- &gt; Lists
有效。第二个在这里是有效的,因为构造函数,但第一个不是。
答案 1 :(得分:1)
你在哪一行得到提到的错误?乍一看,Lists l = new Lists(1);
已经错了:Lists* l = new Lists(1);
是正确的。
但是这个错误与你提到的错误不一致。另请注意,您要定义List
并尝试使用Lists
。
这是你要编译的代码吗?
答案 2 :(得分:1)
如果您想要动态分配的列表,请使用List *l = new List(1);
或std::shared_ptr<List> l = make_shared<List>( 1 );
。
如果您希望列表具有自动存储持续时间,则为List l(1);
。
在使用List的类定义中注意名称,在主函数中使用Lists。