2014-03-28 206 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