C++ Error: Walang Viable Overloaded '=':

C Error Walang Viable Overloaded

Ang mga error ay ang mga operasyon na maaaring resulta ng hindi normal na paggana ng anumang code. Ang error ay hindi matukoy sa oras ng pagsulat hanggang sa naisakatuparan namin ang code o ito ay naipon. Ang ilang mga error ay nagbabawal sa code na isagawa hanggang sa maalis ang mga ito. Ngayon, tatalakayin din natin ang isang error na nangyayari din kapag ang programa ay pinagsama-sama, iyon ay 'error: no match for 'operator=''. Maaaring sanhi ang error na ito dahil sa mga kadahilanan tulad ng: kung naipasa natin ang pointer kung saan ipapasa ang string, pagbabago sa constant variable, atbp. Hindi mahirap tanggalin ang error na 'no viable overloaded' ngunit ang pangunahing gawain ay maunawaan ang error dahil ipinapakita lang nito ang error nang walang anumang paglalarawan ng error.

Syntax

Walang ganoong paunang natukoy na syntax para sa error na ito dahil hindi ito bahagi ng code o ang output ay isang kalabuan lamang na maaaring sanhi dahil sa maling code. Tulad ng nakikita natin, sa ibaba ay isang halimbawa kung ano ang maaaring hitsura ng error.







pagkakamali : walang tugma para sa 'operator = '

Halimbawa # 01:

Magkaroon tayo ng ideya tungkol sa error na ito at ang paraan upang malutas ito. Upang mas maunawaan ito, magsasagawa kami ng isang halimbawa kung saan ipapasa namin ang mga pangalan gamit ang mga bagay sa function at ipapakita nito ang mga ito. Isasama muna namin ang header file na iostream. Pagkatapos nito, idedeklara namin ang isang klase na pinangalanang 'my_object'. Sa loob nito, nagdeklara kami ng dalawang string variable na pinangalanang 'F_name at 'L_name', ang 'F_name' na nagpapahiwatig ng unang pangalan ng tao kung saan ang 'L_name' ay nagpapahiwatig ng apelyido ng tao.



Susunod, nagdeklara kami ng isang pampublikong tagabuo na pinangalanang 'my_object()' kung saan nagtalaga kami ng mga null na halaga sa parehong mga variable na 'F_name' at 'L_name'. Pagkatapos nito, nagdeklara kami ng isa pang function kung saan naipasa namin ang mga variable ng uri ng string na 'fn' at 'ln'. Sa loob nito, tinawag namin ang name_set() na pamamaraan. Pagkatapos, nagdeklara kami ng dalawang function ng miyembro na 'show()' at 'name_set()'. Kapag tinawag ang 'show() function, ipapakita nito ang mga unang pangalan at apelyido nang magkasama. Samantalang, sa function ng miyembro na 'set_name()', ipinasa namin ang dalawang string variable ng uri ng string na 'fn' at 'ln' na ipinasa din namin sa pangalawang constructor.



Ngayon, gamit ang copy assignment operator ng class my_object, kumukuha kami ng isang parameter ng uri na 'my_object'. Palaging idinedeklara ito ng compiler bilang isang inline na pampublikong miyembro ng anumang klase. Sa loob ng miyembrong ito, itinalaga namin ang src.F_name sa 'F_name' at src.L_name sa 'L_name' na napanatili namin ang kopya ng 'F_name' at 'L_name'. Ipinapasa ito sa mga miyembro ng klase my_object. Ngayon, nagdeklara kami ng object ng class my_cobject na pinangalanang 'name1' kung saan ipinasa namin ang dalawang string na 'Anna' at 'smith' bilang argumento. Tatawagin nito ang constructor at ipapakita ang unang pangalan kasama ang apelyido.





Pagkatapos noon, gumawa kami ng isa pang object na 'name2' at pagkatapos ay itinalaga ang pangalan sa object na iyon nang hiwalay. Matapos ipasa ang mga halaga sa constructor para sa parehong mga bagay, tinawag namin ang show() na pamamaraan na magpapakita ng mga pangalan para sa parehong mga bagay na 'nam1' at 'name2'. Sa dulo ng code, ibinalik namin ang null value at isinagawa ang aming code.

isama
klase my_object {
pribado :
std :: string F_name, L_name ;
pampubliko :
my_object ( ) { F_name = '' ; L_name = '' ; }
my_object ( std :: string fn, std :: string ln ) {
name_set ( fn, ln ) ;
}
walang bisa palabas ( ) { std :: cout << 'Ang pangalan ay' << F_name << '' << L_name << '. \n ' ; }
walang bisa name_set ( std :: string fn, std :: string ln ) { F_name = fn ; L_name = ln ; }
my_object at operator = ( const my_object at src ) {
F_name = src. F_name ;
L_name = src. L_name ;
bumalik * ito ;
}

} ;
int pangunahing ( int argc, char ** argv ) {
my_object name1 ( 'Anna' , 'smith' ) ;
my_object name2 ;
pangalan2 = ( 'Anna' , 'smith' ) ;
pangalan1. palabas ( ) ;
pangalan2. palabas ( ) ;
bumalik 0 ;
}

Pagkatapos ng execution ng aming code, mayroon kaming error na ito na nagpapakita na naisulat namin ang maling code sa linya 24 na nagpapahiwatig ng uri ng error na nakatagpo ng 'error: no match for 'operator=''. Ngayon, susubukan naming lutasin ang error na ito.



Para sa paglutas ng error na ito, mayroon kaming maraming paraan upang maipasa ang mga halaga sa constructor ng anumang klase. Sa unang paraan, itatalaga lang namin ang object na 'name1' sa 'name2' dahil naipasa namin ang parehong mga halaga sa parehong mga object kaya hindi na kailangang ipasa ang mga ito nang hiwalay. Ngayon ay isinasagawa namin ang code.

int pangunahing ( int argc, char ** argv ) {

my_object name1 ( 'Anna' , 'smith' ) ;
my_object name2 ;
pangalan2 = pangalan1 ;
pangalan1. palabas ( ) ;
pangalan2. palabas ( ) ;

Pagkatapos gumawa ng mga pagbabago sa code tulad ng ipinapakita sa itaas, mayroon kaming resulta na ibinigay sa snippet sa ibaba. Naipakita namin ang pangalan na ipinasa sa constructor ay matagumpay na naipakita nang walang anumang error.

Ang pangalawang paraan upang malutas ang error na ito ay kapag kailangan nating ipasa ang iba't ibang mga halaga sa parehong mga bagay. Gagamitin lang namin ang pangalan ng klase kasama ang mga value na ipapasa sa constructor bilang argumento. Pinasa namin ang unang pangalan na 'jhone' at ang pangalawang pangalan ay 'smith'. Pagkatapos, pinaandar namin ang code.

int pangunahing ( int argc, char ** argv ) {

my_object name1 ( 'Anna' , 'smith' ) ;
my_object name2 ;
pangalan2 = my_object ( “jhone”, “smith” ) ;

pangalan1. palabas ( ) ;
pangalan2. palabas ( ) ;

Pagkatapos isagawa ang idinagdag na code sa itaas, mayroon kaming output tulad ng ipinapakita sa ibaba. Para sa bagay na 'pangalan1', ipinakita nito ang pangalang 'Anna smith' at para sa pangalawang bagay na 'pangalan2' ipinakita nito ang 'Jhone Smith'. Ngunit sa pagkakataong ito ang aming code ay gumana nang maayos nang walang anumang mga error dito.

Ngayon, susubukan namin ang isa pang paraan para matagumpay na maipatupad ang aming code. Tulad ng sa mga kaso sa itaas, sinubukan naming italaga ang mga halaga sa mga bagay gamit ang assignment operator. Ngunit sa pagkakataong ito, ipapasa natin ang mga halaga sa oras ng deklarasyon ng bagay. Gaya ng nakikita natin sa snippet sa ibaba, sa panahon ng deklarasyon ng isang object na 'name1', ipinasa namin ang mga value bilang argumento sa object na inuulit ang parehong hakbang para sa 'name2'. Ngayon, ipapatupad namin muli ang code.

int pangunahing ( int argc, char ** argv ) {
my_object name1 ( 'Anna' , 'smith' ) ;
my_object name2 ( “jhone”, “smith” ) ;
pangalan1. palabas ( ) ;
pangalan2. palabas ( ) ;

Matapos maisakatuparan ang code para sa oras na ito din, hindi kami nakatagpo ng anumang error na nangangahulugang pipigilan din kami nito na magkaroon ng anumang mga error.

Konklusyon

Sa madaling sabi ay tinalakay namin ang isang error na maaari naming harapin habang nagtatrabaho sa mga function na ina-access mula sa mga klase. Pinag-aralan din namin ang mga sanhi at pamamaraan upang malutas ang error na 'no viable overloaded'. Kadalasan ang error na ito ay mahirap maunawaan para sa mga bagong programmer kaya sinubukan namin para sa kanila na gawing madali ang pag-alis nito sa pamamagitan ng pagpapatupad ng mga halimbawa at pati na rin ang paliwanag nito.