Fehleranruf von überlastet ist mehrdeutig

Fehleranruf von überlastet ist mehrdeutig
In diesem Artikel werden wir einen Fehler diskutieren, der in der C ++ - Sprache auftritt, die überladen ist, ist mehrdeutig. Dieser Fehler hat keinen Einfluss darauf. Wir müssen wissen, was Überlastung ist. Bei der Überlastung deklarieren wir Funktionen mit denselben Namen, aber unterschiedlichen Datenatypen. Das System unterscheidet sich aufgrund ihrer Datentypen zwischen den Funktionen. Mehrdeutig bezieht sich auf mehrere Bedeutungen oder Ähnlichkeiten. Auf andere Weise können wir sagen, dass mehrdeutige bedeutet unklar. Der Fehler erklärt sich also selbst.

Der Fehler tritt auf, wenn eine Funktion, die den Compiler überlastet. Wir können also sagen, dass dieser Fehler aufgrund der Unfähigkeit des Compilers auftritt, eine Auswahl zwischen zwei überlasteten Methoden zu treffen. Dieser ganze Prozess soll mehrdeutig sein, weil er unklar ist. Codes und Programme, die solche Unklarheiten enthalten.

Syntax

Dies ist keine integrierte Funktion oder Bibliothek, die wir diskutieren, sondern ein Fehler, und ein Fehler hat keine bestimmte Syntax. Dies ist die Nachricht, die der Compiler zurückgibt, wenn wir unseren Fehler erhalten.

Fehler: Ruf von überlastetem 'Setval (int)' ist mehrdeutig

Hinweis: Das Wort 'Setval (int)' ist nicht konstant.

Beispiel # 01:

Um unseren Fehler besser zu verstehen, werden wir nun ein Beispiel ausführen, um den Fehler zu erhalten, und danach werden wir den Fehler beheben. Dazu haben wir eine Klasse mit dem Namen Class1 deklariert. In Class1 haben wir private, nicht signierte char -Daten [Bytes] deklariert. In der öffentlichen Abteilung unserer Klasse haben wir zwei Funktionen mit demselben Namen erklärt: "SameFunc". Aber wir haben als Parameter und „const char“ als Parameter „unsigned int“ als Parameter und „const char“ übergeben, damit wir die Methoden überlasten können, indem wir die gleichen Namen und unterschiedlichen Datentypen als Parameter haben. Im ersten "selbenfunc" haben wir "int" mit dem an ihn übergebenen Wert gedruckt. In der zweiten Funktion haben wir "char" mit dem Wert unserer zweiten Funktion gedruckt. Mit der Verwendung eines Objekts in unserer Klasse haben wir die Methode die Hauptmethode bezeichnet. Jetzt werden wir unseren Code ausführen, um zu sehen, was passiert.

#enthalten
#define Bytes 8
Verwenden von Namespace STD;
Klasse Class1

Privatgelände:
nicht signierte Zeichendaten [Bytes];
öffentlich:
void SameFunc (int);
void SameFunc (const char *);
;
void class1 :: samefunc (int t)

Cout<<"int"<
void class1 :: samefunc (const char *s)

Cout<<"char"<
int main ()
class1 p;
P.sameFunc (0);
Rückkehr 0;

Nach der Ausführung unseres Codes hat uns das System eine Fehlermeldung gegeben. Wenn wir uns die Fehlermeldung ansehen, können wir sehen, dass die Nachricht fast die gleiche ist wie zuvor. Der einzige Unterschied ist der Funktionsname. Wir haben Ihnen früher gesagt, dass sich der Funktionsname je nach dem Namen Ihrer Funktion immer wieder ändern wird. Auf jeden Fall hat uns das System den Fehler gegeben, dass „Überladungsaufruf nicht eindeutig“ ist. Es stellt sich eine Frage, dass wir „0“ an unsere Funktion übergeben haben und „0“ eine Ganzzahl ist, warum das System uns diesen Fehler gegeben hat? Lassen Sie uns den Grund ausgraben und versuchen, den Fehler zu beheben.

Um den Fehler zu beheben, werden wir unseren gesamten Code nicht erneut weitergeben. Danach haben wir unseren Code ausgeführt und der Code wurde erfolgreich ausgeführt.

Der Fehler wurde verursacht, weil der Wert „0“ in der C ++ - Sprache zwei Bedeutungen aufweist. Erstens ist es eine Ganzzahl. Zweitens ist es im Fall von Zeichen eine Nullzeigerkonstante. Der Compiler konnte in unserem Fall nicht entscheiden, ob unser Eingabeparameter eine Ganzzahl oder eine Nullzeigerkonstante war. Wir haben zwei Datentypen für unsere Methoden int und char verwendet. Also wurde der Compiler verwirrt. Nach dem Entfernen des Schlüsselworts nahm der Compiler den Parameter als Ganzzahl an und führte die Funktion mit einem Ganzzahl -Datentyp aus.

Beispiel # 02:

Damit Sie den Fehler besser verstehen können, wird er besprochen. Wir haben hier ein weiteres Beispiel durchgeführt. In diesem Beispiel haben wir zwei Methoden mit den gleichen Namen "Addvals" deklariert. Der Unterschied zwischen den beiden Funktionen besteht jedoch darin, dass eine Zahlen als Eingabeparameter einnimmt und der andere Floats als Eingabeparameter nimmt. Beide Methoden haben den gleichen Zweck, sie nehmen Eingabeparameter und summieren ihre Werte auf. In der Hauptmethode haben wir das Ergebnis gedruckt, nachdem sie Operationen für unsere Eingabeparameter ausgeführt haben. Wir werden unseren Code ausführen, um die Ausgabe zu überprüfen.

#enthalten
Verwenden von Namespace STD;
int addvals (int x, int y)

Rückgabe x+y;

int addvals (float x, float y)
Rückgabe x+y;

int main ()
Cout<Rückkehr 0;

Das System hat uns erneut keine Ausgabe gegeben. Stattdessen hat es eine Fehlermeldung geworfen. Die Fehlermeldung ist wieder die gleiche wie die vorherige. Aber der Funktionsname ist anders. In diesem Fall haben wir Werte „1 übergeben.2 ”und„ 3.4 ”zu unserer Funktion, die klar ist, dass diese Werte Schwimmer sind. Es kann eine Frage darauf auftreten, warum das System seinen Job nicht ausgeführt hat und uns den Fehler gegeben hat. Um den Grund zu erhalten, werden wir versuchen, den Fehler zu beheben, und dadurch erhalten wir auch unsere Antwort.

Um den Fehler aufzulösen, haben wir nun „1 eingestellt.2f “und„ 3.4f ”mit unseren Parametern. Wir werden den Code erneut ausführen, um festzustellen, ob dieser Ansatz bei der Auflösung unseres Fehlers hilft oder nicht. Führen wir noch einmal unseren Code aus, um zu sehen, was passiert.

Das System hat uns diesmal keinen Fehler gegeben und unseren Code erfolgreich ausgeführt. Das Problem in unserem Code war also, dass wir in unseren Parametern nicht „F“ einfügten. Wir gingen davon aus, dass der Compiler sie als Float -Werte anstelle von Ganzzahlen lesen würde. Aber wir haben uns geirrt, weil der Compiler alle Schwimmer anfänglich als doppelt identifiziert, es sei denn, wir setzen „F“ als Suffix ein. Sobald wir unser Suffix eingestellt haben, wurde der Code erfolgreich zusammengestellt.

Abschluss

In diesem Leitfaden haben wir einen weiteren Fehler besprochen, der „Überladungsaufruf (Funktion) ist, ist mehrdeutig“. Wir haben besprochen, warum der Fehler auftritt. Wir haben auch das Konzept der Funktion Überlastung besprochen, um unseren Fehler besser zu verstehen. Beispiele wurden durchgeführt, um Ihnen dabei zu helfen, den Fehler besser aufzulösen.