【发布时间】:2020-05-24 03:40:20
【问题描述】:
我正在尝试重载“
#include <iostream>
template<class T>
class main_class
{
public:
class dependent_class
{
public:
dependent_class() : val(0) { }
template<class T>
friend std::ostream& operator<<(std::ostream&, const dependent_class&);
protected:
int val;
};
};
template<class T>
std::ostream& operator<<(std::ostream& out, const typename main_class<T>::dependent_class& v)
{
return out << v.val;
}
int main(int argc, char* argv[])
{
main_class<int>::dependent_class v;
std::cout << v; // error: no operator "<<" matches these operands
// operand types are: std::ostream << main_class<int>::dependent_class
return 0;
}
【问题讨论】:
-
您声明了一个友元函数,它是模板的模板,但您声明的全局函数只是一个将模板类型作为参数的函数。您可能只需要从
friend前面删除template<class T>。
标签: c++ templates operator-overloading friend