V C++ je konštruktor konkrétna členská funkcia, ktorá má svoje meno podľa názvu triedy, s ktorou súvisí. Používa sa na inicializáciu niektorých užitočných hodnôt pre členov objektu. Ak konštruktor nie je definovaný používateľom, kompilátor C++ vygeneruje predvolený konštruktor a neočakáva žiadne parametre a prázdne telo. Keď však existuje užívateľom definovaný konštruktor, je potrebné deklarovať jeho telo a parametre.
Čo spôsobuje chybu „No Matching Constructor for Initialization of“ v C++?
Pri práci s konštruktormi v C++ sa vyskytuje chyba „Žiadny zodpovedajúci konštruktor pre inicializáciu“, je to zvyčajne preto, že keď je konštruktor nazývaný predvoleným konštruktorom kompilátorom, nie je vytvorený, takže musíte parametre a telo konštruktora deklarovať sami. Neschopnosť deklarovať správne parametre má za následok tento typ chyby konštruktora.
Vytvorte jednoduchý textový súbor, vložte do neho kód funkcie Square() a uložte ho s príponou .h. Teraz prilepte tento súbor do zahrnutej zložky priečinka bin kompilátora CPP. Teraz, pri volaní tohto hlavičkového súboru v main.cpp, tento súbor prečíta kompilátor.
Hlavičkový súbor Square.h
#ifndef SQUARE_H#define SQUARE_H
trieda Námestie {
súkromné :
dvojitý dĺžka ;
dvojitý šírka ;
verejnosti :
Námestie ( dvojitý , dvojitý ) ;
dvojitý getLength ( ) konšt ;
dvojitý getWidth ( ) konšt ;
} ;
Námestie :: Námestie ( dvojitý l, dvojitý In ) {
dĺžka = l ;
šírka = In ;
}
dvojitý Námestie :: getWidth ( ) konšt { vrátiť šírka ; }
dvojitý Námestie :: getLength ( ) konšt { vrátiť dĺžka ; }
#koniec Ak
hlavičkový súbor main.cpp
#include#include 'square.h'
použitím menný priestor std ;
int Hlavná ( )
{
Štvorcová krabica 1 ( 10,0 , 10,0 ) ;
Štvorcová krabica 2 ;
cout << 'šírka a dĺžka poľa 1: ' << box1. getWidth ( ) << ',' << box1. getLength ( ) << endl ;
cout << 'šírka a dĺžka poľa 2: ' << box2. getWidth ( ) << ',' << box2. getLength ( ) << endl ;
box2 = box1 ;
cout << 'Keď sa Square Box 1 rovná Square Box 2' << endl ;
cout << 'šírka a dĺžka poľa 1: ' << box1. getWidth ( ) << ',' << box1. getLength ( ) << endl ;
cout << 'šírka a dĺžka poľa 2: ' << box2. getWidth ( ) << ',' << box2. getLength ( ) << endl ;
vrátiť 0 ;
}
V tomto programe používateľ zadá dĺžku a šírku dvoch štvorcových políčok a potom tieto dve políčka zrovná a vráti ich dĺžku a šírku:
Kompilátor vráti chybu v riadku #14, pretože dodávateľ očakáva dva argumenty, zatiaľ čo mu nie sú poskytnuté žiadne argumenty:
V riadku č. 8 kompilátor vráti chybu v konštruktore, pretože argumenty nie sú poskytnuté, zatiaľ čo musia existovať definované argumenty.
Ako vyriešiť chybu „Žiadny zodpovedajúci konštruktor pre inicializáciu“ v C++
Kompilátor zobrazí chybu v riadku č. 8 kódu main.cpp, pretože sa pokúša vyvolať predvolený konštruktor Square. Kompilátor nemôže vygenerovať predvolený konštruktor, pretože už existuje používateľsky definovaný konštruktor, ktorý má dva argumenty. Preto špecifikujte jeho parametre ako:
Štvorcová krabica 2 ( 0 , 10 ) ;
Kompilátor vygeneruje predvolený konštruktor iba vtedy, ak nemá žiadny užívateľom definovaný konštruktor. Takže v tomto prípade, keď je definovaný konštruktor, predvolený konštruktor musí poskytnúť používateľ. Na tento účel teda poskytnite predvolené argumenty aj v konštruktore dvoch argumentov v súbore Square.h. Údaje tak nezostanú neinicializované.
Námestie :: Námestie ( dvojitý l = 0 , dvojitý In = 0 )Chybu konštruktora je možné opraviť zavolaním a deklarovaním konštruktora a jeho parametrov správne. Kódy v main.cpp a Square.h sa menia podľa vyššie uvedených pokynov. A chyba konštruktora, ktorá sa nezhoduje, je vyriešená. Toto je aktualizovaný kód pre súbor hlavičky:
Toto je aktualizovaný kód pre hlavný súbor:
Vyššie uvedené kódy po chybách ladenia vrátia nasledujúci výstup:
Šírka a dĺžka dvoch štvorcových políčok sú poskytnuté používateľom a ich parametre sú vrátené. Neskôr sa použije podmienka, aby sa obe polia zhodovali, a potom sa vrátia ich nové zodpovedajúce hodnoty dĺžky a šírky.
Záver
V C++ je konštruktor konkrétna členská funkcia, ktorá má svoj názov podľa názvu triedy, s ktorou súvisí. Používa sa na inicializáciu niektorých užitočných hodnôt pre členov objektu. Chyba „No Matching Constructor for Initialization of“ v C++ sa vyskytne, keď sa vyskytne chyba v deklarácii konštruktora. Kompilátor C++ zvyčajne generuje konštruktor sám, ale keď sú konštruktory deklarované používateľom, potom musí existovať správna deklarácia parametrov a tela konštruktora, aby sa predišlo takýmto chybám.