利用动态数组来实现栈代码的错误C++

来源:3-2 栈的基本实现

慕姐8741563

2018-08-02

老师好,我在利用动态数组来实现栈时,遇到了错误,错误提示如下:invalid  use  of  member,did  you forget

&


全部代码如下:
#include<cstdio>
#include<iostream>
using namespace std;
template<typename E>
class Array{
public:
    E *data;
    int size;

    Array(int capacity)
    {
       data=new E[capacity];
       size=0;
    }
    void add(int index,E e)
    {
       if(sizeof(data)/sizeof(data[0])==size)
       {
           resize(2*size);
       }
       for(int i=size-1;i>=index;i--)
       {
           data[i+1]=data[i];
       }
       data[index]=e;
       size++;
    }
    void addLast(E e)
    {
        add(size,e);
    }

    int getSize()
    {
        return size;
    }
    bool isEmpty()
    {
        if(sizeof(data)/sizeof(data[0])==0)
        {
            return true;
        }
        return false;
    }
    E remove(int index)
    {
        E ret=data[index];
        for(int i=index+1;i>=0;i--)
        {
            data[i-1]=data[i];
        }
        size--;
        return ret;
    }
    E removeLast()
    {
       E ret=data[size-1];
      size--;
      return ret;
    }
    void resize(int newCapacity)
    {
        E *newData;
        newData=new E[newCapacity];
        for(int i=0;i<size;i++)
        {
            newData[i]=data[i];
        }
        data=newData;
    }
};
template <typename T>
class ArrayStack
{
public:
    Array<T>array1();
       ArrayStack( )
    {
        Array<T>array1();
    }

     ArrayStack(int capacity)
    {
        Array<T>array1(capacity);
    }
     int getSize()
     {
       return array1.getSize();
     }
     bool isEmpty()
     {
         return array1.isEmpty();
     }
     void push(T t)//[with T=int]
     {
         array1.add(0,t);
     }
     T pop()
     {
         return array1.removeLast();
     }

};
int main()
{
    ArrayStack<int>stack1(20);
//    stack1.array1.add(1,2);
    int a=1;
 stack1.push(a);
     // stack1.push(a);
   // stack.push(2);
   // stack.push(3);
   // int a=stack.pop();
   // cout<<a<<endl;
}//

我已经在网上找了很久的答案了,实在找不到,周围也没有人可以问,所以请老师帮忙解答,万分感谢。


写回答

1回答

liuyubobobo

2018-08-02

猛地扫下来,有不少问题。


比如,24行:sizeof(data)/sizeof(data[0])是常数。因为data是指针。sizeof(data)是这个指针的大小,而不是整个连续空间的大小。你需要像课程中一样,设立capacity变量。


比如83行,调用了一个没有参数的Array的构造函数,但你的Array类中,没有没有参数的构造函数。


比如91行,你初始化的array1不是83行的array1。91行的array1是一个同名局部变量。


建议:一个类一个类的做,一个方法一个方法的测试。事实上,课程里也是这么做的。每一个小节基本都会基于这一个小节的任务进行简单的测试。来验证。你可以一定程度的加强测试。

你的Array没有经过验证,基于Array来做Stack,出了错更难找。


课程已经有同学基于C++实现了课程的全部代码,可以参考。传送门:https://github.com/houpengfei88/Play-with-Data-Structures


加油!

5
3
慕姐8741563
多谢老师!?
2018-08-02
共3条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程