如何正确使用new运算符(C ++)

时间:2015-03-30 17:52:54

标签: c++ class allocation

我有课程堆栈:

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。有人可以解释一下如何正确地做到这一点吗?

5 个答案:

答案 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);