Оператор << для вложенного класса
Я пытаюсь перегрузить оператор << для вложенного класса ArticleIterator.
// ...
class ArticleContainer {
public:
class ArticleIterator {
// ...
friend ostream& operator<<(ostream& out, const ArticleIterator& artit);
};
// ...
};
Если я определяю operator<<, как обычно, я получаю ошибку компилятора.
friend ostream& operator<<(ostream& out, const ArticleContainer::ArticleIterator& artit) {
Ошибка 'friend' used outside of class
, Как это исправить?
3 ответа
Решение
Вы не ставите 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";
}
Вы должны объявить его как друга внутри класса, а затем определить его вне класса без ключевого слова friend.
class ArticleContainer {
public:
class ArticleIterator {
// ...
friend ostream& operator<<(ostream& out, const ArticleIterator& artit);
};
};
// No 'friend' keyword
ostream& operator<<(ostream& out, const ArticleIterator& artit);
Ключевое слово friend используется в объявлении, чтобы указать, что этот func/class является другом. В определении вне класса вы не можете использовать это ключевое слово. Просто удали это