错误:将“const SunscreenSPF”作为“this”参数传递会丢弃限定符问题

Posted

技术标签:

【中文标题】错误:将“const SunscreenSPF”作为“this”参数传递会丢弃限定符问题【英文标题】:Error: passing 'const SunscreenSPF' as 'this' argument discards qualifiers issue 【发布时间】:2021-03-23 04:40:04 【问题描述】:

我正在计算一个人在使用屏幕保护膜的情况下可以晒伤多长时间。由于我喜欢使用不同的方法来做事,我创建了一个名为 SunscreenSPF 的类。

class SunscreenSPF

private:
    string skinColor;
    int SPF;
    int time;

public:
    SunscreenSPF(string skinColor, int SPF, int time)
    
        this->skinColor=skinColor;
        this->SPF=SPF;
        this->time=time;
    

    int calculateTime ()
    
        return SPF*time;
    

    friend ostream& operator<<(ostream &os, const SunscreenSPF &data)
    
        os<<"Skin Color = "<<data.skinColor<<endl
          <<"Time outdoors = "<<data.time<<endl
          <<"SPF Level = "<<data.SPF<<endl
          <<"Time to get sunburn with protection = "<<data.calculateTime()<<endl;
    
;

我收到此错误:将“const SunscreenSPF”作为“this”参数传递会丢弃限定符 [-fpermissive]|

我该如何解决这个问题?

【问题讨论】:

你需要从operator&lt;&lt;函数返回os,否则你会遇到警告。 【参考方案1】:

在函数friend ostream&amp; operator&lt;&lt;(ostream &amp;os, const SunscreenSPF &amp;data) 中,data 有一个const 限定符。但是当calculateTime()被调用时,这个成员方法不提供不修改data对象的保证。将const 限定符添加到您的calculateTime() 函数中

int calculateTime () const

    return SPF*time;

【讨论】:

以上是关于错误:将“const SunscreenSPF”作为“this”参数传递会丢弃限定符问题的主要内容,如果未能解决你的问题,请参考以下文章

从 HttpClient 获取 500 错误,在浏览器中工作

Spotify:发布到 api/token 给出了错误的请求,但在 curl 中工作

REST 服务切换到 https,在浏览器中工作,在 c# 中抛出“(403) Forbidden”错误

GET 请求在浏览器中工作,但在 curl 中给出错误 SSL_ERROR_SYSCALL

在FF3中工作时,IE8中的对象未定义错误

自动填充活动工作表后,另一张工作表上的自动填充不起作用(无错误)