关于c++模板类运算符重载在vs2015下编译无法通过的困惑
#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中编译可以通过,可以运行,求高人相助,告诉我为什么。
#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中编译可以通过,可以运行,求高人相助,告诉我为什么。

...全文
相关推荐
C++ 重载运算符+==-用于字符串的比较
在C++编程语言中,重载运算符是一种强大的特性,允许我们为已有的运算符赋予新的含义,以适应特定的数据类型。在这个例子中,我们关注的是重载"=="和"!="运算符,以便用于字符串的比较。
C++作业实验-运算符重载
在VS2010环境下,你可以编写、编译和运行代码,观察运算符重载的效果,加深对这一概念的理解。
等号运算符重载
等号运算符重载 函数重载 c++代码 开发工具:VS2010
在VS2015中实现MFC的串口通信
在Visual Studio 2015 (VS2015) 中使用MFC(Microsoft Foundation Classes)框架实现串口通信是一项常见的任务,特别是在嵌入式系统的上位机开发中。
buttonrpc_cpp14-master.zip
在使用这个项目时,你需要先确保你有一个运行环境支持C++14(如VS2015或更高版本),然后解压缩文件,找到解决方案文件(可能为`.sln`扩展名),在Visual Studio中打开并编译。


