![](/img/trans.png)
[英]Copy constructor initialize a reference member in initialization list causes dangling pointer
[英]Trying to copy the pointer to a list, getting “cannot convert … to … in initialization” error
我希望我的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;
引用的是左侧的敌人列表,而不是我想在课程之外调用的敌人列表。 使用不同的名称解决了这个问题。
首先,听起来像是您想要的:
static list<Ship> enemyList;
目前尚不清楚为什么要包含指针。 如果您使用此表格,那么所有其他问题都会被提出,但是无论如何要回答:
这行没有意义:
std::list<Ship*>* Bullet::enemyList = &enemyList;
您正在尝试初始化列表以指向自身,这是不可能的(因为列表包含Ship*
,而不是list<Ship*>
)。 声明为:
list<Ship*> *Bullet::enemyList;
并且您还必须使该指针指向某个位置(默认情况下将为空指针)。
您的第二个版本可以编译,但是就像编写:
int x = x;
希望你能理解为什么这是一个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.