【发布时间】:2011-06-29 12:26:42
【问题描述】:
//cannot declare operator<<(...) here:
//forward declarations:
class External;
template<class T, class Y>
class External::Internal;
template<class T, class Y>
std::ostream& operator<<(std::ostream& out, const External::Internal<T,Y>&);
class External
{
template<class T, class Y>
class Internal
{};
Internal data_;
void print() {
/*out is a std::ostream*/
out << data_;
}
};
template<class T, class Y>
std::ostream& operator<<(std::ostream& out, const External::Internal<T,Y>&)
{ }
我确实想为Internal 实现operator<<,但是当我尝试使用来自External 的此运算符调用时出现问题:在此运算符的定义下声明此运算符时,它看不到此运算符类,并且似乎无法在此类定义之上声明此运算符。
【问题讨论】:
-
为什么
Internal没有正确限定?
标签: c++ templates operator-overloading forward-declaration nested-class