Kaip išspręsti C++ klaidą „Nėra atitinkamo konstruktoriaus inicijavimui“.

Kaip Isspresti C Klaida Nera Atitinkamo Konstruktoriaus Inicijavimui



C++ kalboje konstruktorius yra tam tikra nario funkcija, kuri pavadinta po klasės, su kuria jis yra susijęs, pavadinimo. Jis naudojamas kai kurioms naudingoms objekto nariams reikšmėms inicijuoti. Jei konstruktoriaus neapibrėžia vartotojas, C++ kompiliatorius sugeneruoja numatytąjį konstruktorių ir tikisi, kad nebus jokių parametrų ir tuščias korpusas. Tačiau kai yra vartotojo apibrėžtas konstruktorius, būtina deklaruoti jo turinį ir parametrus.

Kas sukelia C++ klaidą „Nėra atitinkamo konstruktoriaus inicijavimui“?

Dirbant su konstruktoriais C++ programoje, klaida „No Matching Constructor for Initialization of“ dažniausiai atsiranda todėl, kad kai konstruktorius vadinamas kompiliatoriumi, numatytasis konstruktorius nesukuriamas, todėl jūs turite patys deklaruoti konstruktoriaus parametrus ir turinį. Nepavykus deklaruoti tinkamų parametrų, atsiranda tokio tipo konstruktoriaus klaida.







Sukurkite paprastą tekstinį failą, įklijuokite į jį funkcijos Square() kodą ir išsaugokite jį su plėtiniu .h. Dabar įklijuokite šį failą į CPP kompiliatoriaus šiukšliadėžės aplanko įtraukimo aplanką. Dabar, iškvietus šį antraštės failą main.cpp, šį failą perskaitys kompiliatorius.



Square.h antraštės failas

#ifndef SQUARE_H

#define SQUARE_H


klasė Kvadratas {

privatus :

dvigubai ilgio ;

dvigubai plotis ;

viešas :

Kvadratas ( dvigubai , dvigubai ) ;

dvigubai getLength ( ) konst ;

dvigubai getWidth ( ) konst ;

} ;



Kvadratas :: Kvadratas ( dvigubai l, dvigubai Į ) {

ilgio = l ;
plotis = Į ;

}



dvigubai Kvadratas :: getWidth ( ) konst { grąžinti plotis ; }

dvigubai Kvadratas :: getLength ( ) konst { grąžinti ilgio ; }



#endif

main.cpp antraštės failas

#include

#include 'kvadratas.h'

naudojant vardų erdvė std ;



tarpt pagrindinis ( )

{

Kvadratinė dėžutė 1 ( 10.0 , 10.0 ) ;

Kvadratinė dėžutė 2 ;



cout << '1 langelio plotis ir ilgis: ' << dėžutė1. getWidth ( ) << ', ' << dėžutė1. getLength ( ) << endl ;

cout << ' 2 langelio plotis ir ilgis: ' << dėžutė 2. getWidth ( ) << ', ' << dėžutė 2. getLength ( ) << endl ;



dėžutė 2 = dėžutė1 ;

cout << 'Kai 1 kvadratinis langelis yra lygus 2 kvadratiniam langeliui' << endl ;

cout << '1 langelio plotis ir ilgis: ' << dėžutė1. getWidth ( ) << ', ' << dėžutė1. getLength ( ) << endl ;

cout << ' 2 langelio plotis ir ilgis: ' << dėžutė 2. getWidth ( ) << ', ' << dėžutė 2. getLength ( ) << endl ;



grąžinti 0 ;

}

Šioje programoje vartotojas įveda dviejų kvadratinių langelių ilgį ir plotį, tada sulygina du langelius ir grąžina jų ilgį bei plotį:




Kompiliatorius grąžina klaidą 14 eilutėje, nes rangovas tikisi dviejų argumentų, o argumentų jam nėra:





8 eilutėje kompiliatorius grąžina konstruktoriaus klaidą, nes argumentai nepateikiami, nors turi būti apibrėžti argumentai.

Kaip išspręsti C++ klaidą „Nėra atitinkamo konstruktoriaus inicijavimui“.

Kompiliatorius rodo klaidą main.cpp kodo 8 eilutėje, nes bandoma iškviesti numatytąjį Square konstruktorių. Kompiliatorius negali sugeneruoti numatytojo konstruktoriaus, nes jau yra vartotojo apibrėžtas konstruktorius, kuriam reikia dviejų argumentų. Todėl nurodykite jo parametrus taip:



Kvadratinė dėžutė 2 ( 0 , 10 ) ;

Kompiliatorius sugeneruoja numatytąjį konstruktorių tik tuo atveju, jei jame nėra vartotojo apibrėžto konstruktoriaus. Taigi šiuo atveju, kai yra apibrėžtas konstruktorius, numatytąjį konstruktorių turi pateikti vartotojas. Taigi, šiuo tikslu pateikite numatytuosius argumentus dviejų argumentų konstruktoriuje Square.h faile. Tai nepalieka duomenų inicijuoti.

Kvadratas :: Kvadratas ( dvigubai l = 0 , dvigubai Į = 0 )

Konstruktoriaus klaidą galima ištaisyti tinkamai iškvietus ir deklaruojant konstruktorių bei jo parametrus. Main.cpp ir Square.h kodai keičiami pagal aukščiau pateiktas instrukcijas. Neatitinkančio konstruktoriaus klaida išspręsta. Tai yra atnaujintas antraštės failo kodas:

Tai yra atnaujintas pagrindinio failo kodas:

Aukščiau pateikti kodai po derinimo klaidų grąžina šią išvestį:

Dviejų kvadratinių langelių plotį ir ilgį pateikia vartotojas, grąžinami jų parametrai. Vėliau taikoma sąlyga, kad abu langeliai būtų lygūs, tada bus grąžintos naujos atitinkamos ilgio ir pločio reikšmės.

Išvada

C++ kalboje konstruktorius yra tam tikra nario funkcija, kuri pavadinta po klasės, su kuria jis yra susijęs, pavadinimo. Jis naudojamas kai kurioms naudingoms objekto nariams reikšmėms inicijuoti. C++ klaidoje „Nėra sutampančio konstruktoriaus inicijavimui“ susiduriama, kai konstruktoriaus deklaracijoje yra klaida. Paprastai C++ kompiliatorius pats generuoja konstruktorių, tačiau kai konstruktorius deklaruoja vartotojas, turi būti tinkamai deklaruoti konstruktoriaus parametrai ir turinys, kad būtų išvengta tokių klaidų.