利用动态数组来实现栈代码的错误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
加油!
532018-08-02
相似问题