2015-07-23 23 views
7

Sto provando a scrivere una funzione che prende due numeri e stampa la loro somma."Uso di più() è ambiguo" errore

#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; 
} 

ed errore ottengo:

use of `plus' is ambiguous 

E'il mio primo programma in C++ e in effetti sto ottenendo cieco trovare un errore.

+13

Dobbiamo dichiarare guerra a tutto campo usando 'namespace std;'. –

+3

@FredLarson È curioso di sapere come quasi tutti i libri/tutorial introduttivi di programmazione utilizzino lo usando lo spazio dei nomi std; senza spiegare correttamente cosa significhi e quando dovresti effettivamente usarlo. (La maggior parte delle volte non dovresti) –

+0

In effetti ho letto una buona spiegazione su cosa sta accadendo usando lo spazio dei nomi std, ma non mi sono reso conto che ciò può causare questo problema. – Jac08H

risposta

19

O fare

result = ::plus(a,b); 

o rinominare la funzione. Questa è una buona lezione sul perché lo using namespace std non è considerato una buona pratica.

+0

Sì, funziona. Grazie per la risposta veloce. – Jac08H

+4

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

+2

@ Jac08H Non è necessario contrassegnare la domanda come risolta. Puoi solo accettare la risposta appropriata. – yizzlez

14

C'è già un oggetto funzione nello stdnamespace chiamato plus. A causa di using namespace std;, questo std::plus viene inserito nello spazio dei nomi globale, che è anche il nome di plus(). Quando si tenta di chiamare il proprio plus(), il compilatore non può stabilire se si sta facendo riferimento a std::plus o allo plus() perché entrambi si trovano nello spazio dei nomi globale.

sono disponibili le seguenti opzioni:

  1. Rimuovere using namespace std; (avrete quindi bisogno di qualificare le altre funzioni nel namespace std - per esempio std::cout).
  2. Inserisci il tuo plus() nel proprio spazio dei nomi (ad esempio, mine) e chiamalo utilizzando mine::plus(a, b).
  3. Call your function with ::plus() as suggested (presupponendo che non lo si inserisca nel proprio spazio dei nomi).
  4. Rinominare la funzione in modo che non vi sia alcuna collisione di nome.
+0

'std :: plus' non è una funzione, è un oggetto funzione. Se vuoi chiamarlo, devi fare 'std :: plus() (a, b)' o 'std :: plus {} (a, b)'. –

+0

@LaurentLARIZZA Risolto. Grazie. – Null

Problemi correlati