C++-Fehler: Kein lebensfähiges überladenes „=“:

C Fehler Kein Lebensfahiges Uberladenes



Fehler sind die Operationen, die das Ergebnis der abnormalen Funktionsweise eines beliebigen Codes sein können. Der Fehler kann zum Zeitpunkt des Schreibens nicht erkannt werden, bis wir den Code ausgeführt oder kompiliert haben. Einige Fehler verhindern die Ausführung des Codes, bis sie entfernt werden. Heute werden wir auch einen Fehler besprechen, der auch beim Kompilieren des Programms auftritt, nämlich „error: no match for ‚operator=‘“. Dieser Fehler kann aus folgenden Gründen verursacht werden: Wenn wir den Zeiger übergeben haben, an dem die Zeichenfolge übergeben werden soll, die konstante Variable geändert wird usw. Es ist nicht schwierig, den Fehler „keine lebensfähige Überlastung“ zu entfernen, aber die Hauptaufgabe besteht darin den Fehler verstehen, da er nur den Fehler ohne Beschreibung des Fehlers anzeigt.

Syntax

Es gibt keine solche vordefinierte Syntax für diesen Fehler, da es sich nicht um einen Teil des Codes oder der Ausgabe handelt, sondern nur um eine Mehrdeutigkeit, die durch den falschen Code verursacht werden kann. Wie wir sehen können, ist unten ein Beispiel dafür, wie der Fehler aussehen kann.







Error : keine Übereinstimmung zum 'Operator =

Beispiel # 01:

Lassen Sie uns eine Vorstellung von diesem Fehler und der Methode zu seiner Behebung haben. Um es besser zu verstehen, führen wir ein Beispiel durch, in dem wir die Namen mithilfe von Objekten an die Funktion übergeben und sie dann anzeigen wird. Wir werden zuerst die Header-Datei iostream einbinden. Danach deklarieren wir eine Klasse namens „my_object“. Darin haben wir zwei String-Variablen namens „F_name“ und „L_name“ deklariert, wobei „F_name“ den Vornamen der Person angibt, während „L_name“ den Nachnamen der Person angibt.



Als nächstes haben wir einen öffentlichen Konstruktor namens „my_object()“ deklariert, in dem wir den beiden Variablen „F_name“ und „L_name“ Nullwerte zugewiesen haben. Danach haben wir eine weitere Funktion deklariert, der wir die String-Variablen „fn“ und „ln“ übergeben haben. Darin haben wir die Methode name_set() aufgerufen. Dann haben wir zwei Member-Funktionen „show()“ und „name_set()“ deklariert. Wenn die Funktion „show()“ aufgerufen wird, werden die Vor- und Nachnamen zusammen angezeigt. Wohingegen wir in der Member-Funktion „set_name()“ zwei String-Variablen vom String-Typ „fn“ und „ln“ übergeben haben, die wir auch an den zweiten Konstruktor übergeben haben.



Unter Verwendung des Kopierzuweisungsoperators der Klasse my_object nehmen wir nun einen Parameter vom Typ „my_object“. Der Compiler deklariert es immer als öffentliches Inline-Member jeder Klasse. Innerhalb dieses Members haben wir src.F_name dem „F_name“ und src.L_name dem „L_name“ zugewiesen, sodass wir die Kopie von „F_name“ und „L_name“ beibehalten haben. Dies wird an die Mitglieder der Klasse my_object weitergegeben. Nun haben wir ein Objekt der Klasse my_cobject namens „name1“ deklariert, dem wir zwei Strings „Anna“ und „smith“ als Argument übergeben haben. Dadurch wird der Konstruktor aufgerufen und der Vorname zusammen mit dem Nachnamen angezeigt.





Danach haben wir ein weiteres Objekt „name2“ erstellt und diesem Objekt dann den Namen separat zugewiesen. Nachdem wir Werte für beide Objekte an den Konstruktor übergeben haben, haben wir die Methode show() aufgerufen, die dann die Namen für beide Objekte „nam1“ und „name2“ anzeigt. Am Ende des Codes haben wir den Nullwert zurückgegeben und unseren Code ausgeführt.

enthalten
Klasse mein_objekt {
Privatgelände :
Standard :: Schnur F_Name, L_Name ;
Öffentlichkeit :
mein_objekt ( ) { F_name = ' ' ; L_name = ' ' ; }
mein_objekt ( Standard :: Schnur fn, Std :: Schnur ln ) {
name_set ( fn, ln ) ;
}
Leere Show ( ) { Standard :: cout << 'Der Name ist ' << F_name << ' ' << L_name << '. \n ' ; }
Leere name_set ( Standard :: Schnur fn, Std :: Schnur ln ) { F_name = fn ; L_name = ln ; }
mein_objekt & Operator = ( konst mein_objekt & Quelle ) {
F_name = Quelle F_name ;
L_name = Quelle L_name ;
Rückkehr * Dies ;
}

} ;
int hauptsächlich ( int Argc, verkohlen ** argv ) {
my_object name1 ( 'Anna' , 'Schmied' ) ;
my_object name2 ;
Name2 = ( 'Anna' , 'Schmied' ) ;
Name1. Show ( ) ;
Name2. Show ( ) ;
Rückkehr 0 ;
}

Nach der Ausführung unseres Codes haben wir diesen Fehler, der anzeigt, dass wir den falschen Code in Zeile 24 geschrieben haben, der die Art des aufgetretenen Fehlers angibt „Fehler: keine Übereinstimmung für ‚operator=‘“. Jetzt werden wir versuchen, diesen Fehler zu beheben.



Um diesen Fehler zu beheben, haben wir mehrere Möglichkeiten, die Werte an den Konstruktor einer beliebigen Klasse zu übergeben. Bei der ersten Methode weisen wir einfach das Objekt „name1“ dem Objekt „name2“ zu, weil wir die gleichen Werte an beide Objekte übergeben haben, sodass es nicht notwendig ist, sie separat zu übergeben. Jetzt führen wir den Code aus.

int hauptsächlich ( int Argc, verkohlen ** argv ) {

my_object name1 ( 'Anna' , 'Schmied' ) ;
my_object name2 ;
Name2 = Name1 ;
Name1. Show ( ) ;
Name2. Show ( ) ;

Nachdem Sie den Code wie oben gezeigt geändert haben, haben wir das Ergebnis im folgenden Snippet. Wir haben angezeigt, dass der an den Konstruktor übergebene Name erfolgreich und ohne Fehler angezeigt wird.

Die zweite Methode zur Behebung dieses Fehlers besteht darin, dass wir die unterschiedlichen Werte an beide Objekte übergeben müssen. Wir verwenden einfach den Klassennamen zusammen mit den Werten, die als Argument an den Konstruktor übergeben werden sollen. Wir haben den Vornamen „jhone“ und den zweiten Namen „smith“ übergeben. Dann haben wir den Code ausgeführt.

int hauptsächlich ( int Argc, verkohlen ** argv ) {

my_object name1 ( 'Anna' , 'Schmied' ) ;
my_object name2 ;
Name2 = mein_objekt ( 'John Smith' ) ;

Name1. Show ( ) ;
Name2. Show ( ) ;

Nach dem Ausführen des oben hinzugefügten Codes haben wir die unten gezeigte Ausgabe. Für das Objekt „name1“ wurde der Name „Anna smith“ und für das zweite Objekt „name2“ „Jhone Smith“ angezeigt. Aber diesmal funktionierte unser Code einwandfrei und ohne Fehler.

Jetzt werden wir eine andere Methode ausprobieren, um unseren Code erfolgreich auszuführen. Wie in den obigen Fällen haben wir versucht, die Werte den Objekten mit dem Zuweisungsoperator zuzuweisen. Aber diesmal übergeben wir die Werte zum Zeitpunkt der Deklaration des Objekts. Wie wir im folgenden Snippet sehen können, haben wir zum Zeitpunkt der Deklaration eines Objekts „name1“ die Werte als Argumente an das Objekt übergeben und denselben Schritt für „name2“ wiederholt. Jetzt führen wir den Code noch einmal aus.

int hauptsächlich ( int Argc, verkohlen ** argv ) {
my_object name1 ( 'Anna' , 'Schmied' ) ;
my_object name2 ( 'John Smith' ) ;
Name1. Show ( ) ;
Name2. Show ( ) ;

Nachdem der Code auch für diese Zeit ausgeführt wurde, sind wir auf keinen Fehler gestoßen, was bedeutet, dass dies auch verhindert, dass wir Fehler haben.

Fazit

Wir haben kurz einen Fehler besprochen, auf den wir stoßen können, wenn wir an Funktionen arbeiten, auf die von Klassen aus zugegriffen wird. Wir haben auch die Ursachen und Methoden zur Behebung des Fehlers „No Viable Overloaded“ untersucht. Meistens ist dieser Fehler für neue Programmierer schwer zu verstehen, deshalb haben wir versucht, es ihnen leicht zu machen, ihn durch Implementierung von Beispielen und auch mit seiner Erklärung zu beseitigen.