如何制作两个班级的函数

发布于 2025-01-23 14:34:55 字数 705 浏览 2 评论 0原文

这是我正在做的事情的严重简化版本,但要说明了这一点。我有两个可以用于算术的类。我的问题是我希望能够将两个乘以两个,但是无论如何我尝试这似乎会引起问题。例如:

class A {
    uint32_t val_;

    A(uint32_t src) {
        val_=src;
    }
    friend A operator* (const A &a,const B &b); // <------ throws Unknown type B
};

class B {
    uint32_t val_;
    bool invert_;

    B(A src,bool invert) {
        val_=src.val_;
        invert_=invert;
    }
    friend A operator* (const A &a,const B &b);
};

A operator* (const A &a,const B &b) {
    if (b.invert_) return a.val_/b.val_;
    return a.val_*b.val_;
}

如何解决这个看似递归错误?如果不是B值总是第二次,我会在B类中放置a Operator*(const a&amp; a);,因此我可以只使用friend b 在A类中

This is a grossly simplified version of what I am doing but gets the point across. I have 2 classes that can be used for arithmetic. My problem is I want to be able to multiply the 2 together but anyway I try this seems to cause a problem. For example:

class A {
    uint32_t val_;

    A(uint32_t src) {
        val_=src;
    }
    friend A operator* (const A &a,const B &b); // <------ throws Unknown type B
};

class B {
    uint32_t val_;
    bool invert_;

    B(A src,bool invert) {
        val_=src.val_;
        invert_=invert;
    }
    friend A operator* (const A &a,const B &b);
};

A operator* (const A &a,const B &b) {
    if (b.invert_) return a.val_/b.val_;
    return a.val_*b.val_;
}

how can I get around this seeming recursive error? If it wasn't for the B value always comes second I would put A operator* (const A &a); in the B class so I can just use friend class B in the A class

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

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

发布评论

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

评论(1

扭转时空 2025-01-30 14:34:55

因此,问题是我不知道“前向声明”一词。

class B;  //forward declare B

class A {
    uint32_t val_;

    A(uint32_t src) {
        val_=src;
    }
    friend A operator* (const A &a,const B &b);
};

class B {
    uint32_t val_;
    bool invert_;

    B(A src,bool invert) {
        val_=src.val_;
        invert_=invert;
    }
    friend A operator* (const A &a,const B &b);
};

A operator* (const A &a,const B &b) {
    if (b.invert_) return a.val_/b.val_;
    return a.val_*b.val_;
}

当您知道该术语时,简单修复。

So the problem is I didn't know the term forward declaration.

class B;  //forward declare B

class A {
    uint32_t val_;

    A(uint32_t src) {
        val_=src;
    }
    friend A operator* (const A &a,const B &b);
};

class B {
    uint32_t val_;
    bool invert_;

    B(A src,bool invert) {
        val_=src.val_;
        invert_=invert;
    }
    friend A operator* (const A &a,const B &b);
};

A operator* (const A &a,const B &b) {
    if (b.invert_) return a.val_/b.val_;
    return a.val_*b.val_;
}

simple fix when you know the term.

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