我试图使这些类模板在C ++中工作。但是总会有这个错误。
重载中存在某种错误,但我不知道是什么。
我尝试使用成员函数重载<
#include <iostream>
using namespace std;
const int MAX = 10;
template <class T>
class mstack
{
T stk[MAX];
int top;
public:
mstack()
{
top = -1;
}
void push(T data)
{
if(top==MAX-1)
{
cout << endl << "stack is full" << endl;
}
else
{
top++;
stk[top] = data;
}
}
T pop()
{
if (top==-1)
{
cout << endl << "stack is empty" << endl;
return NULL;
}
else
{
T data = stk[top];
top--;
return data;
}
}
};
class mcomplex
{
float img, real;
public:
mcomplex()
{
real = 0;
img = 0;
}
mcomplex(float r, float i)
{
real = r;
img = i;
}
friend ostream& operator<< (ostream &o,mcomplex &c);
};
ostream& operator<< (ostream &o, mcomplex &c)
{
o << c.real << "\t" << c.img;
return o;
}
int main()
{
mcomplex c1(1.5f,2.5f), c2(3.5f,4.5f), c3(-1.5f,-0.6f);
mstack <mcomplex> s3;
s3.push(c1);
s3.push(c2);
s3.push(c3);
cout << endl << (s3.pop());
cout << endl << s3.pop();
cout << endl << s3.pop() << endl;
return 0;
}
编译器错误如下:
| 76 |错误:与'operator < 'std :: basic_ostream :: __ ostream_type {aka
std :: basic_ostream}”和“ mcomplex”)
| 62 |注:候选项:std :: ostream&运算符< mcomplex&)
| 77 |错误:类型的非常量引用的无效初始化
类型为“ mcomplex”的右值中的“ mcomplex&”
| 78 |错误:与'operator < 'std :: basic_ostream :: __ ostream_type {aka
std :: basic_ostream}”和“ mcomplex”)
谁能显示这里的错误是什么?
最佳答案
您的pop()函数正在返回一个临时值。对该值采用非常量引用是没有意义的。
关于c++ - C++类模板,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52572611/