对于作业,我必须创建一个LinkedList类,这里是标题信息:
struct element{
Event *data;
element *next;
};
class LinkedList {
public:
element *first, *last;
LinkedList();
构造函数是:
LinkedList::LinkedList() {
first = NULL;
last = NULL;
}
我正试图像这样排队:
class EventQueue {
public:
LinkedList events;
最后,我尝试为其创建构造函数时发生错误 EventQueue做:
EventQueue::EventQueue(){
events = new LinkedList();
}
它抛出一个错误,不匹配operator =,操作数类型是LinkedList和LinkedList *。
为什么LinkedList的构造函数会创建指针?我无法找到导致该问题或如何解决问题的原因。
编辑:感谢大家的反应,我觉得自己像个大白痴,我得到了一堆未定义的引用错误,并认为我必须更改构造函数,所以我尝试了全新的对象。实际上,错误发生在我的makefile中,我没有正确链接LinkedList.o文件。谢谢大家回答我的问题!答案 0 :(得分:3)
new
用于动态分配对象,因此它总是返回一个指针。
由于您已将events
声明为LinkedList
,而不是LinkedList*
,因此您无需执行任何操作来初始化它。创建LinkedList
时会自动调用EventQueue
的构造函数。
答案 1 :(得分:1)
表达式new LinkedList()
返回指向新LinkedList
对象的指针,而数据成员LinkedList events;
是一个对象(而不是指向对象的指针)。
请注意,LinkedList events;
对象events
会在创建EventQueue
对象时自动获取(默认) - 初始化;此时,LinkedList
的默认构造函数被隐式调用。
因此,只需删除行events = new LinkedList();