我正在尝试重载<<嵌套类ArticleIterator的运算符。
// ...
class ArticleContainer {
public:
class ArticleIterator {
// ...
friend ostream& operator<<(ostream& out, const ArticleIterator& artit);
};
// ...
};
如果我定义运算符&lt;&lt;就像我通常做的那样,我得到了一个编译器错误。
friend ostream& operator<<(ostream& out, const ArticleContainer::ArticleIterator& artit) {
错误为'friend' used outside of class
。我该如何解决这个问题?
答案 0 :(得分:8)
在定义函数时,只有在声明函数时才放置friend
关键字。
struct A
{
struct B
{
friend std::ostream& operator<<(std::ostream& os, const B& b);
};
};
std::ostream& operator<<(std::ostream& os, const A::B& b)
{
return os << "b";
}
答案 1 :(得分:2)
您必须在课堂内将其声明为朋友,然后在没有friend关键字的情况下在课堂外定义。
class ArticleContainer {
public:
class ArticleIterator {
// ...
friend ostream& operator<<(ostream& out, const ArticleIterator& artit);
};
};
// No 'friend' keyword
ostream& operator<<(ostream& out, const ArticleIterator& artit);
答案 2 :(得分:1)
在声明中使用friend关键字来指定此func / class是朋友。在类外的定义中,您可能不会使用该关键字。只需删除它