2015-07-23 5 views
7

Ich versuche, eine Funktion zu schreiben, die zwei Zahlen nimmt und ihre Summe ausgibt."Verwendung von plus() ist mehrdeutig" Fehler

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

und Fehler erhalte ich:

use of `plus' is ambiguous 

Es ist mein erstes C++ Programm und in der Tat bin ich immer blinder einen Fehler zu finden.

+13

Wir müssen den Befehl 'using namespace std;' –

+3

@FredLarson Ist neugierig, wie fast alle einleitenden Programmierbücher/Tutorials verwenden mit Namespace Std; ohne richtig zu erklären, was das bedeutet, und wann Sie es eigentlich verwenden sollten. (Die meiste Zeit sollten Sie nicht) –

+0

In der Tat lese ich gute Erklärung, was passiert, wenn Sie mit Namespace Std, aber ich habe nicht erkannt, dass dieses Problem verursachen kann. – Jac08H

Antwort

19

Entweder tun

result = ::plus(a,b); 

oder die Funktion umbenennen. Dies ist eine gute Lektion, warum using namespace std nicht als gute Praxis gilt.

+0

Ja, es funktioniert. Danke für die schnelle Antwort. – Jac08H

+4

@ Jac08H Lesen Sie http://StackOverflow.com/Questions/1452721/Why-is-using-Namespace-Std-Consided-bad-Practice –

+2

@ Jac08H Es besteht keine Notwendigkeit, Ihre Frage als behoben markiert. Sie können nur die entsprechende Antwort akzeptieren. – yizzlez

14

Es gibt bereits ein Funktionsobjekt in stdnamespace mit der Bezeichnung plus. Wegen using namespace std; wird diese std::plus in den globalen Namespace gestellt, wo auch Ihr plus() benannt ist. Wenn Sie versuchen, Ihre plus() aufzurufen, kann der Compiler nicht feststellen, ob Sie sich auf std::plus oder Ihre plus() beziehen, da beide sich im globalen Namespace befinden.

Sie haben folgende Möglichkeiten:

  1. entfernen using namespace std; (Sie werden dann andere Funktionen im std Namespace qualifizieren müssen - zum Beispiel std::cout).
  2. Setzen Sie Ihre plus() in einem eigenen Namespace (z. B. mine), und rufen Sie sie mine::plus(a, b).
  3. Call your function with ::plus() as suggested (vorausgesetzt, Sie setzen es nicht in einen eigenen Namensraum).
  4. Benennen Sie die Funktion um, sodass keine Namenskollision auftritt.
+0

'std :: plus' ist keine Funktion, es ist ein Funktionsobjekt. Wenn Sie es aufrufen wollen, müssen Sie 'std :: plus() (a, b)' oder 'std :: plus {} (a, b)' eingeben. –

+0

@LaurentLARIZZA Fest. Vielen Dank. – Null

Verwandte Themen