2014-03-28 140 views
0

我重載operator[]DataStructure類返回指定的值,如下所示:類型轉換泛型類型C++

T& operator[](int i) { 
    return m_array[i]; 
} 

但是,當我遍歷所有的值,我想打印出來,如下所示:

for (int i = 0, s = stack->size(); i < s; ++i) { 
    printf("%7i %5i\n", i, stack[i]); 
} 

由於我創建的一般數據結構爲一個整數棧(派生類)

stack = new Stack<int>(STACKSIZE); 

但這不起作用。我預計堆棧中的每個項目都是int,但是編譯器說我不能轉換Stack<int>int,儘管我沒有試圖對一個堆棧進行類型轉換!

我錯過了什麼?另外,我無法使用

printf("%7i %5i\n", i, (int)stack[i]); 

由於某種原因,它「不是」一個整數類型。

+0

您可以發佈[小例子,讓我們看到了誤差爲自己(HTTP://計算器。 COM /幫助/ MCVE)? – user2357112

+0

您的'operator []'函數使用名爲'm_array'的成員。在'printf'語句中,你使用'stack [i]',它看起來是一個'Stack'對象的數組。顯然,'stack [i]'評估爲一個'Stack'對象。 'm_array'和'stack'之間有什麼關係? –

+0

你來自Java嗎?你會希望在C++中使用'new'比使用Java更少。 – user2357112

回答

7

如果stack是指向Stack<int>的指針,則stack[i]不會調用堆棧的operator[]。它將指針視爲指向數組第一個元素的指針,並嘗試索引該數組。要麼不讓它指針:

Stack<int> stack(STACKSIZE); 

或取消引用指針:

(*stack)[i] 
+0

當我嘗試第一個選項時,更多的事情被打破。但是,第二個選項有效。感謝解釋爲什麼它不工作。 – ranisalt