我希望我的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;
引用了左侧的敌人列表,而不是我想要在类外调用的敌人列表。使用不同的名称解决了这个问题。
答案 0 :(得分:0)
首先,它听起来像你想要的:
static list<Ship> enemyList;
目前尚不清楚为什么要引用指针。如果您使用此表格,那么所有其他问题都没有实际意义,但无论如何要回答:
这条线毫无意义:
std::list<Ship*>* Bullet::enemyList = &enemyList;
您尝试初始化列表以指向自身,这是不可能的(因为列表包含Ship*
,而不是list<Ship*>
)。宣言将是:
list<Ship*> *Bullet::enemyList;
并且您还必须将指针指向某处(默认情况下它将是一个空指针)。
你的第二个版本编译,但它就像写作:
int x = x;
希望你能理解为什么这是一个问题。