【问题标题】:error passing const as this argument of discards qualifiers C++将 const 作为丢弃限定符 C++ 的此参数传递时出错
【发布时间】:2017-06-15 19:32:09
【问题描述】:

我该如何解决这个问题?我不明白错误在哪里 如果你需要我会发布衍生类,谢谢帮助。

float RifiutiP::getPrezzo()const{
    float t=1;
    float nt=0.5;
    if (mode==0)Rifiuti::setCosto(t);
    else Rifiuti::setCosto(nt) ;
    return (Rifiuti::getCosto())*(Rifiuti::getPeso());
}


36  34  C:\Users\acer\Desktop\Università\Programmazione 1\Progetti\Rifiuti\Rifiutip.cpp [Error] passing 'const Mynamespace::RifiutiP' as 'this' argument of 'void Mynamespace::Rifiuti::setCosto(float)' discards qualifiers [-fpermissive]

这是我的基类

#ifndef _RIFIUTI_H
#define _RIFIUTI_H
#include <cstring>
#include <iostream>
using namespace std;
namespace Mynamespace{


class Rifiuti{
    friend ostream& operator<<(ostream &,const Rifiuti&);
    private:
    char* codice;
    int peso;
    float costo;
    public:
    Rifiuti();
    Rifiuti (const char* ,const int);
    virtual ~Rifiuti();
    Rifiuti(const Rifiuti &);
    void setCodice(const char* );
    void setPeso (const int p){peso=p;}
    const char*  getCodice ()const {return codice;}
    const int getPeso ()const {return peso;}
    virtual float getPrezzo()const=0;
    virtual const char* validita(const char *&)const=0;
    void setCosto (const float c){costo=c;}
    const float getCosto()const {return costo;}
    virtual ostream& print(ostream &)const;
};

}
#endif

【问题讨论】:

  • 您不能从 const 成员函数(即 getPrezzo)调用非常量成员函数(即 setCosto)。
  • @songyuanyao:答案在下面,伙计

标签: c++ dev-c++


【解决方案1】:

您的const 成员函数getPrezzo 尝试调用非const 成员函数setCosto

这是不可能的。函数要么改变它的对象,要么不改变;你将不得不选择一个。 (作为一般规则,我会说函数 get**** 不应该“设置”任何东西。)

编译器通过通知您您正在尝试做一些顽皮的事情来完成它的工作。

【讨论】:

  • 但我不能执行 setCosto() const,因为它说:30 42 C:\Users\acer\Desktop\Università\Programmazione 1\Progetti\Rifuti\Rifuti.h [Error] assignment of member ' Mynamespace::Rifiuti::costo' 在只读对象中
  • @JonasGarcia:对,为什么“setCosto”函数应该是const?那将如何运作?这样的函数修改对象,const的意思是“这不会修改对象”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-13
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多