错误:请求'this'中的成员'..',这是非类型' - * const'

时间:2011-12-17 19:49:05

标签: c++

我的第一个问题。请原谅,我刚刚进入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'

3 个答案:

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