#include<iostream>
#include<cassert>
using namespace std;
template<typename T>class stack {
int top;
T *elements;
int maxsize;
public:
stack(int = 20);
~stack() { delete[]elements; }
void push(const T&x);
T pop();
T getelem(int i);
void makeempty() { top = -1; }
bool isempty()const { return top == -1; }
bool isfull()const { return top == maxsize - 1; }
friend ostream &operator<<(ostream&, const stack<T>&);//T必不可少
};
template<typename T>stack<T>::stack(int max) {
maxsize = max;
top = -1;
elements = new T[maxsize];
assert(elements != 0);
}
template<typename T> ostream& operator<<(ostream& s, const stack<T>& s1) {//T必不可少
for (int i = 0; i <= s1.top; i++) s << s1.elements[i] << ' ';
s << endl;
return s;
}
template<typename T>void stack<T>::push(const T&data) {
assert(!isfull());
elements[++top] = data;
}
template<typename T>T stack<T>::pop() {
assert(!isempty());
return elements[top--];
}
template<typename T>T stack<T>::getelem(int i) {
assert(i <= top&&i >= 0);
return elements[i];
}
void main()
{
stack<int> s;
s.push(1);
cout << s << endl;
}
这一段代码在vs2015编译无法通过,但是在vc6.0中编译可以通过,可以运行,求高人相助,告诉我为什么。
