尝试将指针复制到列表,出现"cannot convert ... to ... in initialization"错误

Trying to copy the pointer to a list, getting "cannot convert ... to ... in initialization" error

本文关键字:convert cannot to in 错误 initialization 出现 指针 复制 列表      更新时间:2023-10-16

我希望我的Bullet类能够访问Ship的列表,所以我有一个静态变量,它是指向列表对象的指针。

class Bullet {
    ...
    static list<Ship*>* enemyList;
    ...
}

申报名单,

std::list<Ship*> enemyList;

最后,我提供了我的静态变量的定义:

std::list<Ship*>* Bullet::enemyList = &enemyList;

但是,编译器会给出以下错误:

error: cannot convert `std::list<Ship*, std::allocator<Ship*> >**' to `std::list<Ship*, std::allocator<Ship*> >*' in initialization|

通过将我的定义更改为以下内容,当调用需要列表的函数时,程序会编译但segfault:

std::list<Ship*>* Bullet::enemyList = enemyList;  //no &

这让我相信我对std::list的理解和使用有错误,但我不确定那是什么。谢谢!

编辑:已解决

正如Matt McNabb在下面指出的,右侧的enemyList

std::list<Ship*>* Bullet::enemyList = &enemyList;

引用了左手边的enemyList,而不是我想在类外调用的enemyList。使用不同的名称解决了这个问题。

首先听起来像是你想要的:

static list<Ship> enemyList;

目前还不清楚你为什么希望指针参与其中。如果你使用这个表格,那么你所有的其他问题都会变得毫无意义,但无论如何都要回答:

这句话毫无意义:

std::list<Ship*>* Bullet::enemyList = &enemyList;

您正在尝试初始化列表以指向其自身,这是不可能的(因为列表包含Ship*,而不是list<Ship*>)。声明将是:

list<Ship*> *Bullet::enemyList;

并且您还必须使该指针指向某个位置(默认情况下,它将是一个空指针)。

你的第二个版本编译了,但它就像写:

int x = x;

希望你能理解为什么这是个问题。

相关文章: