我试图弄清为什么不能将重载运算符<<作为成员函数调用,就像我将operator +作为成员函数调用一样。
#include "pch.h"
#include <iostream>
using namespace std;
class A
{
int x;
public: A(int i = 0) { x = i; }
A operator+(const A& a) { return x + a.x; }
template <class T> ostream& operator<<(ostream&);
};
template <class T>
ostream& A::operator<<(ostream& o) { o << x; return o; }
int main()
{
A a1(33), a2(-21);
a1.operator+(a2);
a1.operator<<(cout); // Error here
return 0;
}
答案 0 :(得分:7)
因为您将操作员设置为功能模板,但功能参数不是模板类型。结果,无法解析template参数。您需要使用模板参数来调用它,例如:
a1.operator<< <void>(cout);
但这没用,因为未使用template参数。您要么需要T
作为函数参数的类型:
template <class T> ostream& operator<<(T&);
或者只是使其成为常规功能,因为它看起来好像不需要它作为模板:
ostream& operator<<(ostream& o);