2015-07-23 8 views
7

Próbuję napisać funkcję, która pobiera dwie liczby i wypisuje ich sumę."Używanie plusa() jest niejednoznaczne" error

#include <iostream> 

using namespace std; 

int plus(int, int); 

int main() { 
int a, b, result; 
cout << "2 numbrs"; 
cin>>a>>b; 
result = plus(a,b); 
cout << result; 
return 0; 
} 

int plus(int a,int b) { 
int sum; 
sum = a+b; 
return sum; 
} 

i błędów uzyskać:

use of `plus' is ambiguous 

its mój pierwszy program w C++ i faktycznie jestem coraz niewidomym znalezienia błędu.

+13

Musimy zadeklarować totalną wojnę na 'using namespace std;'. –

+3

@FredLarson Jest ciekawa, jak prawie wszystkie wprowadzające książki/samouczki programowania zatrudniają przy użyciu przestrzeni nazw std; bez odpowiedniego wyjaśnienia, co to oznacza i kiedy należy go używać. (Zazwyczaj nie powinieneś) –

+0

W rzeczywistości czytałem dobre objaśnienie, co dzieje się podczas korzystania z przestrzeni nazw standardowej, ale nie zdawałem sobie sprawy, że może to spowodować ten problem. – Jac08H

Odpowiedz

19

Albo zrobić

result = ::plus(a,b); 

Albo zmienić nazwę funkcji. To dobra lekcja o tym, dlaczego using namespace std nie jest uważana za dobrą praktykę.

+0

Tak, to działa. Dzięki za szybką reakcję. – Jac08H

+4

@ Jac08H Przeczytaj http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice –

+2

@ Jac08H Nie ma potrzeby zaznaczania pytania jako poprawionego. Możesz po prostu zaakceptować odpowiednią odpowiedź. – yizzlez

14

Istnieje już obiekt funkcji w stdnamespace o nazwie plus. Z powodu using namespace std; ten std::plus jest umieszczany w globalnym obszarze nazw, gdzie również znajduje się nazwa użytkownika plus(). Podczas próby połączenia się z plus() kompilator nie może stwierdzić, czy użytkownik odwołuje się do std::plus, czy też do użytkownika plus(), ponieważ oba znajdują się w globalnym obszarze nazw.

Dostępne są następujące opcje:

  1. usuń using namespace std; (będziesz wtedy musiał zakwalifikować inne funkcje w przestrzeni nazw std - np std::cout).
  2. Umieść swoją plus() we własnej przestrzeni nazw (na przykład mine) i wywołaj ją, używając mine::plus(a, b).
  3. Call your function with ::plus() as suggested (zakładając, że nie umieścisz go we własnej przestrzeni nazw).
  4. Zmień nazwę funkcji, aby nie było kolizji nazwy.
+0

'std :: plus' nie jest funkcją, jest obiektem funkcji. Jeśli chcesz go wywołać, musisz wykonać 'std :: plus() (a, b)' lub 'std :: plus {} (a, b)'. –

+0

@LaurentLARIZZA Naprawiono. Dzięki. – Null

Powiązane problemy