2016-03-20 14 views
-7

Also habe ich einen einfachen Rechner für Studienzwecke geschrieben. Aber ich kann es nicht funktionieren, weil ich einen seltsamen Fehler bekomme. Ich habe alles versucht, was ich konnte, aber ich konnte den Fehler nicht beheben. Bitte sieh es dir an und sag es mir.Seltsame Fehler in C++ Programm

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

double add (double x, double y) 
{ 
double addition = x+y; 
return addition; 
} 
double sub (double x ,double y) 
{ 
double subtraction = x-y; 
return subtraction; 
} 
double mul (double x , double y) 
{ 
double multiplication = x*y; 
return multiplication; 
} 
double div (double x, double y) 
{ 
double division = x/y; 
return division; 
} 
int main() 
{ 
int x; int y; int op; 
cout << "Enter a number: "; 
cin >> x; 
cout << "Enter second number: "; 
cin >> y; 
cout << "1: Addition, 2: Subtraction, 3: Multiplication, 4: Division" << endl; 
cout << "What operation you want: "; 
cin >> op; 
switch (op) 
{ 
case 1: 
cout << x << " + " << y << " = " << add(x, y);`enter code here` 
break; 

case 2: 
cout << x << " - " << y << " = " << sub(x,y); 
break; 

case 3: 
cout << x << " * " << y << " = " << mul (x,y); 
break; 
case 4: 
cout << x << "/" << y << " = " << div (x,y); 
break; 
default: 
cout << "Invalid operation" 
} 

} 
+2

Welcher seltsame Fehler? Meine Gedankenlesefähigkeiten sind nicht so gut. – drescherjm

+0

http://coliru.stacked-crooked.com/a/46e15a9f289d4d5c –

+0

Wie @ πάνταῥεῖ mit dem Online-C++ - Compiler hingewiesen haben Sie *** \ 'Code hier am Ende einer Ihrer Zeilen eingeben von Code. Fix das zuerst. – drescherjm

Antwort

4

Da verwendet man

using namespace std; 

Du läufst in Konflikt mit der Standardfunktion div. Da es eine Überlastung std::div_t div(int x, int y); gibt und Sie div mit zwei Ganzzahlen aufrufen, wird dies aufgerufen.

Im Allgemeinen vermeiden Sie using namespace std; in Ihrem Code.

In diesem Fall ist die einfachste Lösung, um nur anders die Funktion zu nennen:

double divide(double x, double y) 
{ 
    double division = x/y; 
    return division; 
} 

Da es unter zwei Doppel keine stdlib Überlastung ist, könnte man auch etwas tun, um den Compiler benutzen um Ihre Funktion:

div(static_cast<double>(x),static_cast<double>(y)); 

ein anderer Ansatz wäre Ihre Funktionen in einem Namespace platzieren:

namespace ops { 
double div(double x, double y) { 
    double division = x/y; 
    return division; 
} 
} // namespace ops 

... 

cout << x << "/" << y << " = " << ops::div(x,y); 
+0

Ich würde vorschlagen, 'using namespace std;' zu entfernen, um das Problem und zukünftige ähnliche Probleme zu vermeiden, obwohl es 5 zusätzliche Zeichen benötigt, um bei der Verwendung von etwas aus der Standardbibliothek zu tippen. – drescherjm

+0

@drescherjm Absolut richtig, aber auch ohne es, zumindest auf coliru, scheint 'std :: div' in den globalen Namensraum zu injizieren und wird trotzdem ausgewählt. –