A C++-ban a konstruktor egy adott tagfüggvény, amely a nevét annak az osztálynak a neve után veszi, amelyhez kapcsolódik. Az objektum tagjai számára néhány hasznos érték inicializálására szolgál. Ha a konstruktort nem a felhasználó határozza meg, a C++ fordító létrehoz egy alapértelmezett konstruktort, és nem vár paramétereket és üres törzset. Ha azonban van egy felhasználó által definiált konstruktor, akkor annak törzsét és paramétereit deklarálni kell.
Mi okozza a „Nincs egyező konstruktor az inicializáláshoz” hibát a C++-ban?
Amikor C++-ban konstruktorokkal foglalkozunk, a „No Matching Constructor for Initialization of” hibával szembesülünk, ez általában azért van, mert amikor a fordító egy konstruktort hív, az alapértelmezett konstruktor nem jön létre, ezért magának kell deklarálnia a konstruktor paramétereit és törzsét. A megfelelő paraméterek deklarálásának elmulasztása ilyen típusú konstruktori hibát eredményez.
Hozzon létre egy egyszerű szöveges fájlt, illessze be a Square() függvény kódját, és mentse el .h kiterjesztéssel. Most illessze be ezt a fájlt a CPP-fordító bin mappájának include mappájába. Most, amikor meghívja ezt a fejlécfájlt a main.cpp-ben, ezt a fájlt beolvassa a fordító.
Square.h fejlécfájl
#ifndef SQUARE_H#define SQUARE_H
osztály Négyzet {
magán :
kettős hossz ;
kettős szélesség ;
nyilvános :
Négyzet ( kettős , kettős ) ;
kettős getLength ( ) const ;
kettős getWidth ( ) const ;
} ;
Négyzet :: Négyzet ( kettős l, kettős Ban ben ) {
hossz = l ;
szélesség = Ban ben ;
}
kettős Négyzet :: getWidth ( ) const { Visszatérés szélesség ; }
kettős Négyzet :: getLength ( ) const { Visszatérés hossz ; }
#endif
main.cpp fejlécfájl
#include#include 'négyzet.h'
segítségével névtér std ;
int fő- ( )
{
Négyzet alakú doboz 1 ( 10.0 , 10.0 ) ;
Négyzet alakú doboz 2 ;
cout << ' az 1. mező szélessége és hossza: ' << doboz1. getWidth ( ) << ', ' << doboz1. getLength ( ) << endl ;
cout << ' a 2. mező szélessége és hossza: ' << doboz2. getWidth ( ) << ', ' << doboz2. getLength ( ) << endl ;
doboz2 = doboz1 ;
cout << 'Amikor az 1. négyzet négyzet egyenlő a 2. négyzetméterrel' << endl ;
cout << ' az 1. mező szélessége és hossza: ' << doboz1. getWidth ( ) << ', ' << doboz1. getLength ( ) << endl ;
cout << ' a 2. mező szélessége és hossza: ' << doboz2. getWidth ( ) << ', ' << doboz2. getLength ( ) << endl ;
Visszatérés 0 ;
}
Ebben a programban a felhasználó beírja két négyzet alakú négyzet hosszát és szélességét, majd egyenlővé teszi a két négyzetet, és visszaadja a hosszukat és szélességüket:
A fordító a 14. sorban lévő hibát adja vissza, mert a vállalkozó két argumentumot vár, miközben nincs argumentum hozzá:
A 8. sorban a fordító hibát ad vissza a konstruktorban, mert az argumentumok nincsenek megadva, miközben meg kell lenniük a meghatározott argumentumoknak.
Hogyan lehet megoldani a „No Matching Constructor for Initialization of” hibát a C++ nyelven
A fordító a hibát a main.cpp kód 8. sorában jeleníti meg, mert a Square alapértelmezett konstruktorát próbálták meghívni. A fordító nem tud alapértelmezett konstruktort generálni, mert van már egy felhasználó által definiált konstruktor, amely két argumentumot vesz fel. Ezért a paramétereit a következőképpen adja meg:
Négyzet alakú doboz 2 ( 0 , 10 ) ;
A fordító csak akkor hoz létre alapértelmezett konstruktort, ha nem rendelkezik felhasználó által definiált konstruktorral. Tehát ebben az esetben, ha van konstruktor definiálva, az alapértelmezett konstruktort a felhasználónak kell megadnia. Tehát ehhez adjon meg alapértelmezett argumentumokat a Square.h fájl kétargumentumos konstruktorában is. Ez nem hagyja inicializálatlanul az adatokat.
Négyzet :: Négyzet ( kettős l = 0 , kettős Ban ben = 0 )A konstruktor hiba a konstruktor és paramétereinek megfelelő meghívásával és deklarálásával javítható. A main.cpp és a Square.h kódjai a fenti utasításoknak megfelelően módosulnak. És a nem egyező konstruktor hiba megoldódott. Ez a fejlécfájl frissített kódja:
Ez a főfájl frissített kódja:
A fenti kódok a hibakeresési hibák után a következő kimenetet adják vissza:
Két négyzet alakú négyzet szélességét és hosszát a felhasználó adja meg, és ezek paramétereit adja vissza. Később egy feltételt alkalmazunk, hogy mindkét doboz egyenlő legyen, majd a megfelelő új hossz- és szélességértékek kerülnek visszaadásra.
Következtetés
A C++-ban a konstruktor egy adott tagfüggvény, amely a nevét annak az osztálynak a neve után veszi, amelyhez kapcsolódik. Az objektum tagjai számára néhány hasznos érték inicializálására szolgál. A „No Matching Constructor for Initialization of” hibával a C++-ban akkor kell szembesülni, ha hiba van a konstruktor deklarációjában. Általában a C++ fordító maga generál egy konstruktort, de amikor a konstruktorokat a felhasználó deklarálja, akkor meg kell adni a paraméterek és a konstruktor törzsének megfelelő deklarációját, hogy elkerüljük az ilyen hibákat.