我的第一个问题。请原谅,我刚刚进入C ++并开始使用DS。 STACK !!!
我的代码:我想
using namespace std;
typedef char stackElement;
class Stack
{
public:
stackElement *contents; //dynamically allocated: as we do not know what would be the size of our array.
int top, maxSize; // current Top index in the array
//max size of the array; we need it to know if the array is full
Stack(int maxSize)
{
contents = new stackElement(maxSize);
this.maxSize = maxSize;
if(contents == NULL)
{
cout<<"Insufficient memory";
exit(1);
}
top = -1;
}
~Stack()
{
delete [] contents;
contents = NULL;
maxSize = 0;
top = -1;
}
bool isEmpty()const
{
return top < 0;
}
bool isFull() const
{
return top == maxSize - 1;
}
void push(stackElement element)
{
if(isFull())
{
cout<<"STACK IS ALREADY FULL";
exit(1);
}
top = top + 1;
contents[top] = element;
}
};
int main()
{
cout<<"STACK IMPLEMENTATION";
int i = 1;
Stack s1(i);
s1.push('a');
s1.push('1');
return 0;
}
我收到此错误:
error: request for member 'maxSize' in 'this', which is of non-class type 'Stack* const'
答案 0 :(得分:12)
如果有的话,你必须写this->maxSize = maxSize;
,因为this
是指针。
但最好不要写它,而是使用构造函数初始化列表:
explicit Stack(int m)
: contents(new stackElement[m]), top(-1), maxSize(m)
{
// nothing else to do
}
我还添加了explicit
,因此您不会意外地将5
转换为Stack
。
你还写错了数组初始化。
此外,您不需要检查contents
是否为空:当new
失败时,它会以异常退出,不会返回空指针。 (当你从对象的角度思考时,这种行为就毫无意义。)
至关重要的是要注意您的构造函数中最多只有一个裸new
- 表达式。其他任何事情都是异常安全灾难,并且表明您需要重构并使用单一责任资源管理类。
析构函数应该只是:~Stack() { delete [] contents; }
其他一切都是毫无意义的浪费。
想象一下,您必须为您编写的每一行代码支付。要有耐心,失去资源,思考。
答案 1 :(得分:2)
写
this->maxSize = maxSize;
而不是
this.maxSize = maxSize;
this
是指针类型,而不是引用类型
答案 2 :(得分:1)
this->maxSize
代替this.maxSize