运算符<<上课超载

时间:2017-12-18 23:16:00

标签: c++ class templates operator-overloading

A是我写的C ++类:

class A
{
private:
    int _num1;
    int _num2;
public:
    A(int num1, int num2)
    {
        _num1 = num1;
        _num2 = num2;
    }

    ~A(){}

    int getNum1() { return _num1; };
    std::ostream &operator<<(std::ostream &os, A const &obj) { return os << obj.getNum1(); };
};

有一个模板的功能printArray

template <class T>
void printArray(T* arr, int size)
{
    int i = 0;
    for (i = 0; i < size; i++)
        cout << arr[i] << endl;
}

当我写主函数时:

    A arr4[4] = { A(1,1), A(1,4), A(6,6), A(0,0) };
    printArray(arr4, 4);

有这样的错误:

  

E0344此操作员功能的参数太多。

     

C2804二进制&#39;运算符&lt;&lt;&#39;参数太多了。

     

C2333&#39; A :: operator&lt;&lt;&#39;:函数声明中的错误;跳过功能体。

问题是什么以及如何解决?

  

当然我包括了iostream

1 个答案:

答案 0 :(得分:2)

你有两个问题: 1.您应该使用friend关键字来重载<<运算符 2. getNum1应为const

class A
{
private:
    int _num1;
    int _num2;
public:
    A(int num1, int num2)
    {
        _num1 = num1;
        _num2 = num2;
    }

    ~A() {}

    int getNum1() const { return _num1; };
    friend std::ostream &operator<<(std::ostream &os, A const &obj) { return os << obj.getNum1(); };
};