我有此代码:
#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&) const;
friend ostream& operator<<(ostream&,const Flacon &);
friend Flacon& operator+(Flacon const&, Flacon const&);
};
Flacon& operator+(Flacon const& f1, Flacon const& f2){
Flacon f3(f1.nom + " " + f2.nom, f1.volume + f2.volume, -log10((f1.volume * pow(10,-f1.pH) + f2.volume * pow(10,-f2.pH))/(f1.volume + f2.volume)));
return f3;
}
ostream& Flacon::etiquette(ostream& sortie) const {
sortie << nom << " : " << volume << " ml, pH " << pH;
return sortie;}
ostream& operator<<(ostream& o,const Flacon & f){
f.etiquette(o);
return o;
}
/*******************************************
* Ne rien modifier après cette ligne.
*******************************************/
void afficher_melange(Flacon const& f1, Flacon const& f2)
{
cout << "Si je mélange " << endl;
cout << "\t\"" << f1 << "\"" << endl;
cout << "avec" << endl;
cout << "\t\"" << f2 << "\"" << endl;
cout << "j'obtiens :" << endl;
cout << "\t\"" << (f1 + f2) << "\"" << endl;
}
int main()
{
Flacon flacon1("Eau", 600.0, 7.0);
Flacon flacon2("Acide chlorhydrique", 500.0, 2.0);
Flacon flacon3("Acide perchlorique", 800.0, 1.5);
afficher_melange(flacon1, flacon2);
afficher_melange(flacon2, flacon3);
return 0;
}
当我编译时,我收到以下警告消息:
chimie.cc:23:9:警告:返回了对本地变量“ f3”的引用 [-Wreturn-local-addr] Flacon f3(f1.nom +“” + f2.nom,f1.volume + f2.volume,-log10((f1.volume * pow(10,-f1.pH)+ f2.volume * pow(10,-f2.pH))/(f1。体积+ f2。体积)));
当我构建时:
chimie.cc:23:9:警告:返回了对本地变量“ f3”的引用 [-Wreturn-local-addr] Flacon f3(f1.nom +“” + f2.nom,f1.volume + f2.volume,-log10((f1.volume * pow(10,-f1.pH)+ f2.volume * pow(10,-f2.pH))/(f1。体积+ f2。体积)));
当我跑步时:
Si jemélange“ Eau:600 ml,pH 7” avec“酸性氯化物:500 ml,pH为2“的j'obtiens:分割错误(堆芯被丢弃)