Ako vyriešiť chybu „Žiadny zodpovedajúci konštruktor pre inicializáciu“ v C++

Ako Vyriesit Chybu Ziadny Zodpovedajuci Konstruktor Pre Inicializaciu V C



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.