2016-03-20 72 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

正如@πάνταῥεῖ用在线C++编译器指出的那样,*** \在这里输入代码\ ***在您的一行代码的末尾的代码。首先解决它。 – drescherjm

回答

4

因为使用

using namespace std; 

您正在运行与标准功能div冲突。具体来说,由于存在重载std::div_t div(int x, int y);,并且您使用两个整数调用div,所以会调用该方法。

一般情况下应避免在代码中使用using namespace std;

在这种情况下,最简单的解决方法是只是名称不同的功能:

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

由于没有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

我建议删除'using namespace std;'以避免出现问题和未来类似的问题,即使使用标准库中的东西时需要5个额外的字符才能输入。 – drescherjm

+0

@drescherjm绝对是真的,但是即使没有它,至少在coliru上,'std :: div'似乎被注入到全局命名空间中,仍然被选中。 –