![](/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.