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

How to properly use new operator (C++)

我有 class 个堆栈:

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:'.push' 的左侧必须有 class/struct/union。谁能解释一下正确的做法?

s 是指向堆栈的指针。使用 -> 运算符访问 class 方法(函数)。

你的情况是 s->push(10);

我认为您将推送称为 obj.push(value)。这是错误的,当使用指向对象的指针时,您将使用 -> 访问成员。所以试试 obj->push(value)

s 是指向代码中堆栈的指针。要访问对象的方法,使用 . 运算符。因此,您应该首先取消引用指针,然后使用 . 运算符。这相当于使用 -> 运算符。

s->push() 等同于 (*s).push().

或者您无需声明指向堆栈的指针,而只需声明对象即可。代码将显示为 stack s(100);

动态分配方法的正确使用方法是用->调用方法。所以你应该像这样调用 push 方法:s->push(int x)。

int main()
{
  Stack * s = new Stack(5);
  s->push(60);
 }

其他人已经给出了很好的答案。我只是想添加一个小评论。除非你有特定的理由创建一个指针,并且如果你坚持使用点(。)而不是 -> 你可以将你的代码更改为:

Stack s(100); 

然后你就可以调用:

s.push(value);