试图将指针复制到列表,获取“无法转换为......初始化时...”错误

时间:2014-09-27 23:05:00

标签: c++ list pointers static

我希望我的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|

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

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

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

编辑:已解决

正如下面的Matt McNabb所指出的,

右侧的敌人列表
std::list<Ship*>* Bullet::enemyList = &enemyList;

引用了左侧的敌人列表,而不是我想要在类外调用的敌人列表。使用不同的名称解决了这个问题。

1 个答案:

答案 0 :(得分:0)

首先,它听起来像你想要的:

static list<Ship> enemyList;

目前尚不清楚为什么要引用指针。如果您使用此表格,那么所有其他问题都没有实际意义,但无论如何要回答:

这条线毫无意义:

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

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

list<Ship*> *Bullet::enemyList;

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

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

int x = x;

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