2012-05-03 274 views
0

對象我是我新來的C++,並通過一個項目,我在大學我有一些困難的時候。更多spesificaly: 我創建了列表和隊列的代碼(列表名稱=鏈,隊列名=隊列,產品是一個基本上具有鏈字段的結構)[順便說一句,如果有人知道它,我使用了Sahnis書籍(數據結構)。我在這裏堅持:對象初始化(C++)

int k=4; 
Queue<Chain<Product>*>* x = new Queue<Chain<Product>*> [k]; 
for(int i=1;i<k;i++) 
{ 
    x[i] = new Queue<Chain<Product>*> [i+1]; 
} 

環路它拋出我的錯誤:無效的轉換,從隊列*> *爲int

任何想法?

+3

數組從0開始,而不是1. – chris

+1

擺脫'[i + 1]'。 – ildjarn

+0

使用一個向量(或甚至一個普通的數組),而不是指針數組也會有所幫助。 – chris

回答

2

它應該是

for(int i=0;i<k;i++) // first index is 0 
{ 
    x[i] = Queue<Chain<Product>*>(); 
} 

因爲

Queue<Chain<Product>*>* x = new Queue<Chain<Product>*> [k]; 

創建Queue<Chain<Product>*>對象,而不是指針數組。

或者,如果你想有一個2-d陣列,可以使用:

Queue<Chain<Product>*>** x = new Queue<Chain<Product>*> * [k]; 
for(int 0=1;i<k;i++) 
{ 
    x[i] = new Queue<Chain<Product>*> [i+1]; 
} 

爲了簡化,你基本上嘗試以下操作:

int* x = new int[4]; 
for (int i = 0 ; i < 4 ; i++) 
    x[i] = new int[i]; 

這顯然是錯誤的。

+0

順便說一句,我不記得它是否可以在C++(我主要在C#和Java中工作),但不能隊列<鏈 *>有一個靜態函數'.operator [int x]'?這顯然不是這樣,但只是問。 – 2012-05-03 20:19:56

+0

@Shingetsu是的,它可以重載操作符,但我沒有看到有'靜態'操作符[]'的要點。 –

+0

我的意思是有可能超載運算符是靜態的嗎?如果它可能存在,它可能用於從某個文件位置或類似位置檢索該類的解碼版本,這些都是詳細信息。 – 2012-05-03 20:23:06

1

在行x[i] = new Queue<Chain<Product>*> [i+1]他[i + 1]是錯誤的。
爲什麼?那麼你正在創建一個新的對象new關鍵字。並且在數組中使用.operator[int x]。在這一行中,你說它應該是一個新的數組,其大小爲i + 1,其類型爲Queue<Chain<Product>*>,這是錯誤的。而是使用x[i] = Queue<Chain<Product>*>();

所以最終代碼:

for(int i=0;i<k;i++)//because indexes begin at 0, not 1. 
{ 
    x[i] = Queue<Chain<Product>*>() 
} 

注*看看你的錯誤的簡化版本,看其他人的帖子(我不會各地複製代碼 - 浪費空間)。

+0

謝謝你的幫助。當我運行它compliles完美,但窗口彈出一個錯誤,當我運行它,說filename.exe停止exececuting。沒有for循環它彈出同樣的事情,這意味着我還沒有爲我的陣列保存空間。簡單地用我的舊代碼ID沒有編譯,因爲我有幾個錯誤,但如果我沒有for循環,結果是與您的代碼 –

+0

@ Tryme_34它沒有鏈接與此相同。停止執行並不總是意味着內存不足,我猜想這是代碼後面的錯誤。發佈全新源代碼的新問題。 – 2012-05-03 21:37:02

+0

是的,我會明天發佈,但請記住,我的代碼編譯和運行沒有初始化好,當我添加此代碼窗口彈出消息 明天我會創建一個完整的主題感謝您的幫助! –