2014-12-19 31 views
0

你好夥計,當我試圖從一個對象創建多個對象,並想調用構造函數時,我得到索姆奇怪的錯誤。SFML C++創建多個對象並在構造函數中調用?

錯誤是:不能使用類型爲const茶* r的值來初始化類障礙的實體[3] 創建對象這裏referes給玩家對象,因爲它的作品,即使我嘗試了-loop設置我的( 「IMG ......」)我得到了同樣的錯誤

static const int CAP = 3; 
//Works! Player player = ("img/playerSheet.png"); 
Obstacle obstacles[CAP] =("img/obstacle.png"); 

的障礙構造看起來像這樣

Obstacle::Obstacle(string spriteSearch) : Object(spriteSearch) 
{ 
setPosition(750, 500); 
} 

//菲利普

+0

用大括號替換這些圓括號:'{}'。請注意,這將調用默認構造函數的每個其他對象的參數沒有給出,所以確保你有一個。 – 0x499602D2 2014-12-19 01:10:49

回答

1

您正在使用不正確的方法聲明數組。您創建一個包含三個對象的數組。您需要使用默認構造函數初始化每個對象。這是一種方法。 如果你以前沒見過結構,別擔心。所有你需要知道的,它就像一個小班。

#include <iostream> 
#include <string> 

using namespace std; 

struct Object 
{ 
    string name; 
    Object(string _name) 
    { 
     name = _name; 
    } 
}; 

int main() 
{ 
    Object obs[3] = {"one", "two", "three"}; 

    cout<<obs[0].name<<obs[1].name<<obs[2].name<<endl; 

    system("pause"); 
    return 0; 
} 

編輯;如果您的容量很大,請說1000.我會建議添加一個單獨的功能。你不在默認構造函數中進行初始化,但實際上會創建一個Initialize函數。你以後打電話。舉個例子;

Obstacle obstacles[CAP]; 
for(int i=0; i<CAP; i++) 
{ 
    obstacles[i].Initialize("img/playerSheet.png"); 
} 

評論:「好吧,我只是編輯的構造上面,我錯了之前寫的...所以你的意思是for循環和我如何調用構造函數,像obstaclei;?:O」的

我可能在這裏錯了。但我認爲,以調用實際的構造,唯一的辦法就是做這樣的:

變化:

Obstacle obstacles[CAP] =("img/obstacle.png"); 

喜歡的東西;

const int CAP = 5; 
Object** obstacles = new Object*[CAP]; 

for(int i = 0; i<CAP; i++) 
{ 
    obstacles[i] = new Object(filename); 
} 

//Do other stuff. And when done, release memory. 

for(int i=0; i<CAP; i++) 
{ 
    delete obstacles[i]; 
} 
delete []obstacles; 

這是相當複雜的解決方案,如果你不習慣使用指針。

+0

謝謝你喜歡這項工作障礙障礙[CAP] = {「img/playerSheet.png」,「img/playerSheet.png」,「img/playerSheet.png」}; – 2014-12-19 01:10:29

+0

是的。如果它是一個很大的變量,就像你有1000個容量一樣。我會建議只是做一個指針。 – 413X 2014-12-19 01:12:26

+0

'code'Obstacle :: Obstacle(string spriteSearch):Object(spriteSearch) { \t setPosition(750,500); }'code'I beleve它會調用默認的構造函數,但我想調用這個構造函數 – 2014-12-19 01:17:24

相關問題