2016-03-20 93 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'似乎被注入到全局命名空間中,仍然被選中。 –