关于c++模板类运算符重载在vs2015下编译无法通过的困惑

includeios includeios 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#include "stdafx.h"
#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中编译可以通过,可以运行,求高人相助,告诉我为什么。
...全文

相关推荐

评论 5
收藏 已收藏
分享
返回顶部
includeios
C++ 语言 65,214 成员 250,514 内容