我是c ++的初学者。最近在练习编写链表时,我尝试使用初始化列表为我的类构造函数指定NULL给head-> next。
在班级构造函数中,它警告我的箭头操作员"期待'('或' {'"。为什么会出现这样的错误?(我知道我可以在块中初始化类成员,但为什么我不能用这个指针做这个?) 谢谢!
这是我的链表的头文件:
linkedlist.h
#include <iostream>
using namespace std;
struct node {
int val;
node *next;
};
class linkedlist {
private:
node *head;
int listlen;
public:
linkedlist();
void insert(node*, int);
void del(node*);
void reverse(node*);
void traverse(node*);
int random();
~linkedlist();
};
这是我的班级构造函数:
linkedlist.cpp
#include "linkedlist.h"
#include <iostream>
linkedlist::linkedlist() :listlen(0), head->next(NULL){}
答案 0 :(得分:2)
通常,您只能将成员本身初始化为初始化列表的一部分。如果这是你唯一的问题,那么你可以将NULL
的下一个指针初始化为ctor主体的一部分。但是,您的成员变量head
本身就是一个指针,当前并未指向任何位置,因此我怀疑您确实希望将head
本身设置为NULL
(或nullptr
#39;重新使用c ++ 11或更高版本):
linkedlist::linkedlist() :listlen(0), head(NULL) {}
您还可以考虑在初始化时向struct node
添加一个ctor以初始化next
到NULL
。
我认为可能值得指出的其他一些事情,因为你说过你是新的:
请注意,初始化列表不是按照它们在ctor中写入的顺序运行,而是按照在类中定义成员的顺序运行。身体。在您的情况下,此listlen
实际上仅在初始化head
后初始化为0。这对你的代码来说并不重要,但是如果成员的初始化更复杂并且具有依赖性,则可能很重要。就个人而言,我建议始终保持初始化列表的顺序与成员定义的顺序相匹配。如果不是这种情况,某些编译器也会有警告标志。
您是否考虑过使用标准库中的数据结构,而不是实现自己的链表?查看cppreference.com以获取有关它的大量重要信息。特别是,请查看&#39;列表&#39;,&#39;向量&#39;或者&#39; deque&#39;取决于您的使用案例。