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
答案 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(); };
};