运算符<<对于嵌套类

发布于 2024-09-28 18:52:36 字数 547 浏览 4 评论 0 原文

我正在尝试超载 <<嵌套类 ArticleIterator 的运算符。

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

如果我定义运算符<<就像我通常做的那样,我收到编译器错误。

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

错误是在课堂外使用了“friend”。我该如何解决这个问题?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

梦明 2024-10-05 18:52:36

定义函数时不要添加 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";
}

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";
}
指尖微凉心微凉 2024-10-05 18:52:36

您必须在类内将其声明为友元,然后在类外定义它(不使用friend 关键字)。

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

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

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);
指尖上的星空 2024-10-05 18:52:36

在声明中使用friend关键字来指定该函数/类是友元。在类外部的定义中,您不能使用该关键字。只需将其删除即可

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文