оператор << для вложенного класса - PullRequest
4 голосов
/ 25 октября 2010

Я пытаюсь перегрузить оператор << для вложенного класса ArticleIterator. </p>

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

Если я определяю operator <<, как обычно, я получаю ошибку компилятора. </p>

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

Ошибка 'friend' used outside of class. Как мне это исправить?

Ответы [ 3 ]

8 голосов
/ 25 октября 2010

Вы не ставите ключевое слово 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";
}
2 голосов
/ 25 октября 2010

Вы должны объявить его как друга в классе, а затем определить его вне класса без ключевого слова friend.

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

// No 'friend' keyword
ostream& operator<<(ostream& out, const ArticleIterator& artit);
1 голос
/ 25 октября 2010

ключевое слово friend используется в объявлении, чтобы указать, что этот func / class является другом.В определении вне класса вы не можете использовать это ключевое слово.Просто удали его

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...