如何正确使用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);
我有 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);