c++运算符重载vs2015中报错,而用vc6.0不会报错

图片说明
#include "stdafx.h"
#include
#include
using namespace std;
templateclass 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必不可少
};
templatestack::stack(int max) {
maxsize = max;
top = -1;
elements = new T[maxsize];
assert(elements != 0);
}
template ostream& operator<<(ostream& s, const stack& s1) {//T必不可少
for (int i = 0; i <= s1.top; i++) s << s1.elements[i] << ' ';
s << endl;
return s;
}
templatevoid stack::push(const T&data) {
assert(!isfull());
elements[++top] = data;
}
templateT stack::pop() {
assert(!isempty());
return elements[top--];
}
templateT stack::getelem(int i) {
assert(i <= top&&i >= 0);
return elements[i];
}
void main()
{
stack s;
s.push(1);
cout << s << endl;
}

4个回答

类声明里要template<T>加上

不知道是不是你代码没复制全,iostream头文件,你模板函数的template也没有,当然报错了

VC6.0的要求不严格,有些能编译过的在之后的编译器报错很正常,前面两个说的对

vs对代码检查比较严格,看下模板类的语法吧

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问