错误:将“ const Flacon”传递为“ this”参数会丢弃限定词[-fpermissive]

时间:2020-04-29 07:17:04

标签: c++

我有此代码:

#include <iostream>
#include <string>
#include <cmath>
using namespace std;

class Flacon
{
private:
  string nom;
  double volume;
  double pH;

public:
    Flacon(string nom, double volume, double pH): nom(nom), volume(volume), pH(pH) {}
    ostream& etiquette(ostream&);
    friend ostream& operator<<(ostream&,const Flacon &);   
};

ostream& Flacon::etiquette(ostream& sortie){
    sortie << nom << " : " << volume << " ml, pH " << pH;
    return sortie;}

ostream& operator<<(ostream& o,const Flacon & f){
    o=f.etiquette(o);
    return o;
}

第26行的标题错误:

o=f.etiquette(o);

同一行还有另一个错误:

error: use of deleted function ‘std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator=(const std::basic_ostream<_CharT, _Traits>&) [with _CharT = char; _Traits = std::char_traits<char>]’

1 个答案:

答案 0 :(得分:0)

第一个错误是因为f的类型为const Flacon &,但尚未声明etiquette。您不能使用const对象来调用非const方法。更改

const

对此

ostream& etiquette(ostream&);

还有这个

ostream& etiquette(ostream&) const;

对此

ostream& Flacon::etiquette(ostream& sortie){

第二个错误是因为流对象不可分配,但您无需分配它,只需更改此

ostream& Flacon::etiquette(ostream& sortie) const {

对此

ostream& operator<<(ostream& o,const Flacon & f){
    o=f.etiquette(o);
    return o;
}