运算符 = 不匹配,构造函数创建一个指针

no match for operator =, constructor creates a pointer

本文关键字:一个 指针 创建 不匹配 构造函数 运算符      更新时间:2023-10-16

对于作业,我必须创建一个 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();
}

它抛出一个错误,与运算符 = 不匹配,操作数类型是 LinkedList 和 LinkedList*。

为什么 LinkedList 的构造函数会创建一个指针?我找不到导致这种情况的原因或如何解决它。

编辑:感谢大家的回复,我觉得自己像个白痴,我遇到了一堆未定义的引用错误,并认为我必须更改构造函数,所以我尝试了全新的对象。实际上,错误出在我的制作文件中,我没有正确链接 LinkedList.o 文件。谢谢大家回答我的问题!

>new用于对象的动态分配,因此它始终返回指针。

由于你已经将events声明为LinkedList,而不是LinkedList*,所以你不需要做任何事情来初始化它。创建EventQueue时,将自动调用 LinkedList 的构造函数。

表达式

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