operator <<用于嵌套类

Pie*_*ter 4 c++ operator-overloading friend

我正在尝试为嵌套类ArticleIterator重载<<运算符.

// ...
class ArticleContainer {
    public:
        class ArticleIterator {
                        // ...
                friend ostream& operator<<(ostream& out, const ArticleIterator& artit);
        };
        // ...
};
Run Code Online (Sandbox Code Playgroud)

如果我像我通常那样定义operator <<,那么我会遇到编译器错误.

friend ostream& operator<<(ostream& out, const ArticleContainer::ArticleIterator& artit) {
Run Code Online (Sandbox Code Playgroud)

错误是'friend' used outside of class.我该如何解决?

Pet*_*der 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";
}
Run Code Online (Sandbox Code Playgroud)

  • 想到这一点,这与声明和定义的关系不大.您可以在类内部词法定义朋友,并且可以在没有friend关键字的情况下重新声明类外的函数.我认为这是关于特定声明出现的位置 - 友元说明符只能在类定义中的词法上应用于函数声明 (2认同)