我有课程堆栈:
class Stack {
private:
int top;
int capacity;
int *storage;
public:
Stack(int capacity) {
if (capacity <= 0)
throw string("Stack's capacity must be positive");
storage = new int[capacity];
this->capacity = capacity;
top = -1;
}
void push(int value) {
if (top == capacity)
throw string("Stack's underlying storage is overflow");
top++;
storage[top] = value;
}
...
我尝试用
分配它Stack* s = new Stack (100);
当我尝试执行任何Stack函数时(例如推),我得到一个错误C2228:左边的&#39; .push&#39;必须有class / struct / union。有人可以解释一下如何正确地做到这一点吗?
答案 0 :(得分:1)
是指向堆栈的指针。使用->
运算符访问类方法(函数)。
在你的情况下,它会
s->push(10);
答案 1 :(得分:0)
我认为你称之为obj.push(value)
。这是错误的,当使用指向对象的指针时,您将使用 - &gt;访问成员。所以试试obj->push(value)
答案 2 :(得分:0)
s
是指向代码中堆栈的指针。要访问对象的方法,请使用.
运算符。因此,您应首先取消引用指针,然后使用.
运算符。这相当于使用->
运算符。
s->push()
相当于(*s).push()
。
或者您不需要声明指向堆栈的指针,而只是声明对象。代码将显示为stack s(100);
答案 3 :(得分:0)
使用动态分配方法的正确方法是使用 - &gt;调用方法。所以你应该像这样调用push方法:s-&gt; push(int x)。
int main()
{
Stack * s = new Stack(5);
s->push(60);
}
答案 4 :(得分:0)
其他人已经给出了很好的答案。我只想添加一个小评论。除非您有特定的理由创建指针,并且如果您坚持使用点(。)而不是 - &gt;您可以将代码更改为:
Stack s(100);
然后你就可以打电话了:
s.push(value);