c++ 相互分配类的问题

yrdbyhpb  于 2023-02-26  发布在  其他
关注(0)|答案(2)|浏览(130)

当我尝试转换类时,我无法找出导致错误的原因。对象具有与成员函数“Gradien::setAngel”不兼容的类型限定符。
将阶数转换为渐变的重载运算符

Gradien& operator=(const Degree& d) const { 
    int a = static_cast<int>((d.getAngel() / 360.0) * 400);
    setAngel(a);
    return *this;
}

在本例中,Gradien是Degree的子类,它们看起来几乎相同:

class Gradien : public Degree
{
private:
    int angle = 400;

    const string unit = " gon";

public:
    Gradien() = default;
    Gradien(int a) : Degree(a) {};
    int getAngel() const { return angle; } 
    void setAngel(int w) { angle = w; }
    string getUnit() const { return unit; }
}

我试图通过删除consts来更改某事,但没有更改。这似乎导致了问题:setAngel(a);
乐于助人:)

rqcrx0a6

rqcrx0a61#

赋值运算符符合const条件:

Gradien& operator=(const Degree& d) const { 
//                                  ^^^^^

这使得调用setAngel(即 * 不 * const限定)无效:

setAngel(a);

使用const限定的赋值运算符可能会破坏使用赋值运算符的目的。

qnyhuwrf

qnyhuwrf2#

您已将operator=重载声明为const。它是一个常量方法。您可以对非常量对象或常量对象调用它,但该方法不能修改对象。
operator=声明为const(几乎)是没有意义的,因为赋值通常需要修改它。

相关问题