没有匹配的operator =,构造函数创建一个指针

时间:2017-10-05 20:25:43

标签: c++

对于作业,我必须创建一个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文件。谢谢大家回答我的问题!

2 个答案:

答案 0 :(得分:3)

new用于动态分配对象,因此它总是返回一个指针。

由于您已将events声明为LinkedList,而不是LinkedList*,因此您无需执行任何操作来初始化它。创建LinkedList时会自动调用EventQueue的构造函数。

答案 1 :(得分:1)

表达式new LinkedList()返回指向新LinkedList对象的指针,而数据成员LinkedList events;是一个对象(而不是指向对象的指针)。 请注意,LinkedList events;对象events会在创建EventQueue对象时自动获取(默认) - 初始化;此时,LinkedList的默认构造函数被隐式调用。 因此,只需删除行events = new LinkedList();

即可