簡體   English   中英

嘗試將指針復制到列表,出現“無法在初始化時將…轉換為…”錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM