我正在尝试给班级写一个朋友运算符<<,并且得到了这个多余的警告。而且不知道如何解决它。
谢谢。
#include <iostream>
using namespace std;
template<class T>
class test
{
public:
explicit test(T a) noexcept : m_{ a } {}
template <class Y>
//line below shows that warning.
friend std::ostream& operator<<(std::ostream& out, const test<Y>& lhs);
private:
T m_;
};
template<class Y>
std::ostream& operator<<(std::ostream& out, const test<Y>& lhs)
{
out << lhs.m_ << endl;
return out;
}
int main()
{
test<int> p {25};
test<double> q {17.5};
std::cout << "By Friend " << p;
std::cout << "By Friend " << q;
return 0;
}
编辑1 //从运算符中删除模板Y <<类声明中的
template<class T>
class test
{
public:
explicit test(T a) noexcept : m_{ a } {}
friend std::ostream& operator<< (std::ostream&, const test<T>&);
private:
T m_;
};
template<class T>
std::ostream& operator<<(std::ostream& out, const test<T>& lhs)
{
out << lhs.m_ << endl;
return out;
}
现在我收到警告
警告:朋友声明'std :: ostream&运算符<<(std :: ostream&,const test&)'声明一个非模板函数[-Wnon-template-friend]
PS:在Visual Studio中,我出现了错误链接
编辑1.2 //已完成EDIT 1
我将Edit 1更改如下:
....
friend std::ostream& operator<< <> (std::ostream&, const test<T>&);
....
因此警告和错误链接已解决。