Verstehe den Fehler nicht
-
Also ich habe länger gesucht und bei den Referenzen nichts gefunden, was mir eine
Dezimalzahl in einen Bruch umwandelt, also wollte ich eine Klasse definieren (Bruch
halt) wo ich eine Methode habe, die mir Dezimalzahlen in Brüche umwandelt. Habe ich
dann alles schön gemacht und funktioniert auch, aber der Compiler beschwert sich
mit folgendem Fehler:Warning W8026 test.cpp 25: Functions taking class-by-value argument(s) are not
expanded inline in function bruch::umwandeln(string,double)Hier ist mal mein Quellcode:
// test.cpp
#include <iostream>
using namespace std;#include <iostream>
#include <string>
#include <cmath>
using namespace std;class bruch
{
public:int nenner;
int zaehler;bruch()
{
nenner = 0;
zaehler = 0;
}void umwandeln(string s, double d)
{
int stelle;
s.find('.', stelle);nenner = pow(10, s.size() - stelle - 1);
zaehler = nenner * d;
}
};int main()
{
string de;
double za;
bruch br;cin >> de;
cin >> za;br.umwandeln(de, za);
cout << "Zaehler: " << br.zaehler << " Nenner: " << br.nenner;
return 0;
}Nicht wunder, dass gehört eigentlich in ein größeres Programm und das habe ich
halt nur eben zum testen abgeschrieben :).
Habe auch schon gegoogelt und bin irgendwie fündig geworden, aber das hat mir
nicht wirklich weiter geholfen. Anscheinend mag der Compiler es nicht den string
zu kopieren und deshalb soll er angeblich meckern, aber ob ich das so richtig
verstanden habe -> keine Ahnung.Kann mir das jemand genauer erklären und wie ich das beseitigen kann?
al3pou
-
Das ist kein Fehler, sondern bloss eine Warnung.
Da du den string byValue und nicht byReference uebergibst entscheidet sich der Compiler, die Funktion nicht zu inlinen.
Falls dir passByValue, passByReference und Function Inlining nichts sagt, dann kannst du die Warnung fuer den Moment ignorieren.Mit
void umwandeln(const string& s, double d) { //... }sollte die Warnung wahrscheinlich verschwinden.
-
Alle klar. Danke
