我试图使这些类模板在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/

10-11 16:09