Ц++ грешка: Нема одрживог преоптерећења „=“:

C Greska Nema Odrzivog Preopterecena



Грешке су операције које могу бити резултат ненормалног рада било ког кода. Грешка се не може открити у време писања док не извршимо код или док се не компајлира. Неке грешке забрањују извршавање кода док се не уклоне. Данас ћемо такође разговарати о грешци која се такође јавља када се програм компајлира, а то је „грешка: нема подударања за ’оператор=’“. Ова грешка може бити узрокована из разлога као што су: ако смо прослиједили показивач на који стринг треба да се проследи, модификовање константне променљиве, итд. Није тешко уклонити грешку „но виабле оверлоадед“, али је главни задатак да разумете грешку јер само приказује грешку без икаквог описа грешке.

Синтакса

Не постоји таква унапред дефинисана синтакса за ову грешку јер она није део кода или излаз, већ је само нејасноћа која може бити узрокована погрешном кодом. Као што видимо, испод је пример како грешка може изгледати.







грешка : нема подударања за ‘оператер = '

Пример #01:

Хајде да имамо идеју о овој грешци и методу за њено решавање. Да бисмо то боље разумели, извешћемо пример у коме ћемо проследити имена помоћу објеката функцији и она ће их затим приказати. Прво ћемо укључити датотеку заглавља иостреам. Након тога ћемо прогласити класу под називом „ми_објецт“. Унутар којих смо декларисали две стринг променљиве под називом „Ф_наме и „Л_наме“, „Ф_наме“ које означава име особе где „Л_наме“ означава презиме особе.



Затим смо декларисали јавни конструктор под називом „ми_објецт()“ у коме смо доделили нулте вредности обема променљивама „Ф_наме“ и „Л_наме“. Након тога, декларисали смо другу функцију којој смо проследили променљиве типа стринг „фн“ и „лн“. Унутар тога, позвали смо метод наме_сет(). Затим смо декларисали две функције члана „схов()“ и „наме_сет()“. Када се позове функција „схов(), она ће приказати имена и презимена заједно. Док смо у функцији члана „сет_наме()” проследили две стринг променљиве типа стринг „фн” и „лн” које смо такође проследили другом конструктору.



Сада, користећи оператор доделе копирања класе ми_објецт, узимамо један параметар типа „ми_објецт“. Компајлер га увек декларише као инлине јавног члана било које класе. Унутар овог члана, доделили смо срц.Ф_наме 'Ф_наме' и срц.Л_наме 'Л_наме' да смо задржали копију 'Ф_наме' и 'Л_наме'. Ово се прослеђује члановима класе ми_објецт. Сада смо декларисали објекат класе ми_цобјецт под називом „наме1“ коме смо проследили два низа „Анна“ и „смитх“ као аргумент. Ово ће позвати конструктор и приказати име заједно са презименом.





Након тога, креирали смо још један објекат „наме2“ и затим доделили име том објекту засебно. Након што смо прослеђивали вредности конструктору за оба објекта, позвали смо метод схов() који ће затим приказати имена за оба објекта „нам1“ и „наме2“. На крају кода смо вратили нулту вредност и извршили наш код.

укључити
класа мој_објекат {
приватни :
стд :: низ Ф_наме, Л_наме ;
јавности :
мој_објекат ( ) { Ф_наме = ' ' ; Л_наме = ' ' ; }
мој_објекат ( стд :: низ фн, стд :: низ лн ) {
наме_сет ( фн, лн ) ;
}
празнина Прикажи ( ) { стд :: цоут << 'Име је ' << Ф_наме << ' ' << Л_наме << „. ' ; }
празнина наме_сет ( стд :: низ фн, стд :: низ лн ) { Ф_наме = фн ; Л_наме = лн ; }
мој_објекат & оператер = ( конст мој_објекат & срц ) {
Ф_наме = срц. Ф_наме ;
Л_наме = срц. Л_наме ;
повратак * ово ;
}

} ;
инт главни ( инт аргц, цхар ** аргв ) {
име мог_објекта1 ( 'Ана' , 'ковач' ) ;
име мог_објекта2 ;
име2 = ( 'Ана' , 'ковач' ) ;
име1. Прикажи ( ) ;
име2. Прикажи ( ) ;
повратак 0 ;
}

Након извршења нашег кода, имамо ову грешку која показује да смо написали погрешан код у линији 24 указујући на врсту грешке на коју је наишла „грешка: нема подударања за ’оператор=’“. Сада ћемо покушати да решимо ову грешку.



За решавање ове грешке, имамо више начина да проследимо вредности конструктору било које класе. У првом методу, једноставно ћемо доделити објекат “наме1” објекту “наме2” јер смо проследили исте вредности оба објекта тако да нема потребе да их преносимо одвојено. Сада извршавамо код.

инт главни ( инт аргц, цхар ** аргв ) {

име мог_објекта1 ( 'Ана' , 'ковач' ) ;
име мог_објекта2 ;
име2 = име1 ;
име1. Прикажи ( ) ;
име2. Прикажи ( ) ;

Након што извршите промене у коду као што је приказано изнад, имамо резултат дат у исечку испод. Приказали смо име које је прослеђено конструктору и успешно се приказује без грешке.

Други метод за решавање ове грешке је када морамо да пренесемо различите вредности на оба објекта. Једноставно ћемо користити име класе заједно са вредностима које треба да се проследе конструктору као аргумент. Прошли смо прво име „јхоне“ и друго име „смитх“. Затим смо извршили код.

инт главни ( инт аргц, цхар ** аргв ) {

име мог_објекта1 ( 'Ана' , 'ковач' ) ;
име мог_објекта2 ;
име2 = мој_објекат ( 'Џон Смит' ) ;

име1. Прикажи ( ) ;
име2. Прикажи ( ) ;

Након извршавања претходно доданог кода, имамо излаз као што је приказано у наставку. За објекат „наме1“ приказао је име „Анна смитх“, а за други објекат „наме2“ је приказао „Јхоне Смитх“. Али овај пут је наш код радио исправно без икаквих грешака у њему.

Сада ћемо покушати са другим методом за успешно извршавање нашег кода. Као иу претходним случајевима, покушали смо да доделимо вредности објектима помоћу оператора доделе. Али овог пута ћемо проследити вредности у тренутку декларације објекта. Као што можемо да видимо у исечку испод, у време декларације објекта „наме1“, пренели смо вредности као аргумент објекту понављајући исти корак за „наме2“. Сада поново извршавамо код.

инт главни ( инт аргц, цхар ** аргв ) {
име мог_објекта1 ( 'Ана' , 'ковач' ) ;
име мог_објекта2 ( 'Џон Смит' ) ;
име1. Прикажи ( ) ;
име2. Прикажи ( ) ;

Након што се код изврши и за ово време, нисмо наишли на ниједну грешку, што значи да ће нас то такође спречити да имамо било какве грешке.

Закључак

Укратко смо разговарали о грешци са којом се можемо суочити док радимо на функцијама којима се приступа из класа. Такође смо проучили узроке и методе за решавање грешке „нема одрживог преоптерећења“. Углавном је ова грешка тешко разумљива за нове програмере, па смо покушали да им олакшамо да се отарасе применом примера и такође њеним објашњењем.