Pieter
Pieter

Reputation: 32755

operator<< for nested class

I'm trying to overload the << operator for the nested class ArticleIterator.

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

If I define operator<< like I usually do, I get a compiler error.

friend ostream& operator<<(ostream& out, const ArticleContainer::ArticleIterator& artit) {

The error is 'friend' used outside of class. How do I fix this?

Upvotes: 4

Views: 6519

Answers (3)

xPheRe
xPheRe

Reputation: 2343

You must declare it as a friend inside the class, then define it outside the class without the friend keyword.

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

// No 'friend' keyword
ostream& operator<<(ostream& out, const ArticleIterator& artit);

Upvotes: 2

Armen Tsirunyan
Armen Tsirunyan

Reputation: 132984

the friend keyword is used in the declaration to specify that this func/class is a friend. In the definition outside the class you may not use that keyword. Just remove it

Upvotes: 1

Peter Alexander
Peter Alexander

Reputation: 54270

You don't put the friend keyword when defining the function, only when declaring it.

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";
}

Upvotes: 8

Related Questions