2016-03-20 15 views
-7

私は勉強のための簡単な電卓を書いて​​います。しかし、私は奇妙なエラーが発生するので、私はそれを働かせることはできません。私はできることすべてを試みたが、私はエラーを解決できなかった。それを見て教えてください。C++プログラムの奇妙なエラー

#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

どのような奇妙なエラー?私の読書能力はそれほど良いものではありません。 – drescherjm

+0

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

+0

@πάνταῥεAsはオンラインのC++コンパイラで指摘したように、あなたの行の最後に*** \ 'コードを入力してください。コードの最初に修正してください。 – drescherjm

答えて

4

あなたは、標準機能divとの競合に実行している

using namespace std; 

を使用しているため。具体的には、過負荷はstd::div_t div(int x, int y);であり、divを2つの整数で呼び出すと、これが呼び出されます。

通常、コードにusing namespace std;を使用しないでください。この場合

、最も簡単な修正はちょうど異なった機能に名前を付けるためにある:

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

2倍を取って何STDLIB過負荷がないので、あなたはまた、コンパイラがあなたを使用するために、このような何かを行うことができます機能:

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

別のアプローチは、名前空間にあなたの機能を置くことになります。

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

... 

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

標準ライブラリから何かを使用するときに5文字の余分な文字が必要になるにもかかわらず、問題を避けるために 'using namespace std;'を削除することをお勧めします。 – drescherjm

+0

@drescherjmしかし、それがなくても、少なくともcoliruでは、 'std :: div'はグローバルな名前空間に注入されているように見えますが、依然として選択されています。 –