我希望我的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;
希望你能理解为什么这是个问题。