Kuinka ratkaista 'Ei vastaavaa rakentajaa alustukseen' -virheen C++:ssa

Kuinka Ratkaista Ei Vastaavaa Rakentajaa Alustukseen Virheen C Ssa



C++:ssa konstruktori on tietty jäsenfunktio, joka saa nimensä sen luokan nimen jälkeen, johon se liittyy. Sitä käytetään joidenkin hyödyllisten arvojen alustamiseen objektin jäsenille. Jos käyttäjä ei ole määrittänyt konstruktoria, C++-kääntäjä luo oletuskonstruktorin ja ei odota parametreja ja tyhjää runkoa. Kuitenkin, kun on olemassa käyttäjän määrittämä konstruktori, sen runko ja parametrit on ilmoitettava.

Mikä aiheuttaa 'No Matching Constructor for Initialization of' -virheen C++:ssa?

Kun käsitellään C++:n konstruktoreita, 'No Matching Constructor for Initialization of' -virhe kohdataan tämä johtuu yleensä siitä, että kun rakentajaa kutsutaan, oletuskonstruktoria ei ole luotu, joten sinun on ilmoitettava konstruktorin parametrit ja runko itse. Oikeiden parametrien ilmoittamatta jättäminen johtaa tämän tyyppiseen konstruktorivirheeseen.





Luo yksinkertainen tekstitiedosto, liitä siihen Square()-funktion koodi ja tallenna se .h-tunnisteella. Liitä nyt tämä tiedosto CPP-kääntäjän bin-kansion sisällytyskansioon. Nyt kun tätä otsikkotiedostoa kutsutaan main.cpp:ssä, kääntäjä lukee tämän tiedoston.



Square.h otsikkotiedosto

#ifndef SQUARE_H

#define SQUARE_H


luokkaa Neliö {

yksityinen :

kaksinkertainen pituus ;

kaksinkertainen leveys ;

julkinen :

Neliö ( kaksinkertainen , kaksinkertainen ) ;

kaksinkertainen getLength ( ) konst ;

kaksinkertainen getWidth ( ) konst ;

} ;



Neliö :: Neliö ( kaksinkertainen l, kaksinkertainen Sisään ) {

pituus = l ;
leveys = Sisään ;

}



kaksinkertainen Neliö :: getWidth ( ) konst { palata leveys ; }

kaksinkertainen Neliö :: getLength ( ) konst { palata pituus ; }



#loppu Jos

main.cpp-otsikkotiedosto

#include

#include 'neliö.h'

käyttämällä nimiavaruus std ;



int pää ( )

{

Neliönmuotoinen laatikko 1 ( 10.0 , 10.0 ) ;

Neliönmuotoinen laatikko 2 ;



cout << ' laatikon 1 leveys ja pituus: ' << laatikko 1. getWidth ( ) << ', ' << laatikko 1. getLength ( ) << endl ;

cout << ' laatikon 2 leveys ja pituus: ' << laatikko 2. getWidth ( ) << ', ' << laatikko 2. getLength ( ) << endl ;



laatikko 2 = laatikko 1 ;

cout << 'Kun neliöruutu 1 on yhtä suuri kuin neliöruutu 2' << endl ;

cout << ' laatikon 1 leveys ja pituus: ' << laatikko 1. getWidth ( ) << ', ' << laatikko 1. getLength ( ) << endl ;

cout << ' laatikon 2 leveys ja pituus: ' << laatikko 2. getWidth ( ) << ', ' << laatikko 2. getLength ( ) << endl ;



palata 0 ;

}

Tässä ohjelmassa käyttäjä syöttää kahden neliömäisen laatikon pituuden ja leveyden ja vertaa sitten kaksi ruutua ja palauttaa niiden pituuden ja leveyden:




Kääntäjä palauttaa virheen rivillä #14, koska urakoitsija odottaa kahta argumenttia, vaikka sille ei ole esitetty yhtään argumenttia:





Rivillä #8 kääntäjä palauttaa virheen rakentajassa, koska argumentteja ei anneta, vaikka määritetyt argumentit on oltava.

Kuinka ratkaista 'Ei vastaavaa rakentajaa alustukseen' -virheen C++:ssa

Kääntäjä näyttää virheen main.cpp-koodin rivillä #8, koska Squaren oletuskonstruktoria yritetään kutsua. Kääntäjä ei voi luoda oletuskonstruktoria, koska olemassa on jo käyttäjän määrittämä konstruktori, joka ottaa kaksi argumenttia. Siksi määritä sen parametrit seuraavasti:



Neliönmuotoinen laatikko 2 ( 0 , 10 ) ;

Kääntäjä luo oletuskonstruktorin vain, jos sillä ei ole käyttäjän määrittämää rakentajaa. Joten tässä tapauksessa, kun konstruktori on määritetty, käyttäjän on annettava oletuskonstruktori. Anna siis tätä tarkoitusta varten oletusargumentit myös Square.h-tiedoston kahden argumentin konstruktoriin. Tämä ei jätä tietoja alustamatta.

Neliö :: Neliö ( kaksinkertainen l = 0 , kaksinkertainen Sisään = 0 )

Konstruktorivirhe voidaan korjata kutsumalla ja ilmoittamalla konstruktori ja sen parametrit oikein. Main.cpp:n ja Square.h:n koodit muutetaan yllä olevien ohjeiden mukaisesti. Ja ei-vastaava rakentajavirhe on korjattu. Tämä on otsikkotiedoston päivitetty koodi:

Tämä on päätiedoston päivitetty koodi:

Yllä olevat koodit palauttavat seuraavan tulosteen virheenkorjausvirheiden jälkeen:

Käyttäjä ilmoittaa kahden nelikulmaisen laatikon leveyden ja pituuden, ja niiden parametrit palautetaan. Myöhemmin sovelletaan ehtoa, joka tekee molemmista laatikoista yhtä suuret, ja sitten palautetaan niiden uudet vastaavat pituus- ja leveysarvot.

Johtopäätös

C++:ssa konstruktori on tietty jäsenfunktio, joka saa nimensä sen luokan nimen jälkeen, johon se liittyy. Sitä käytetään joidenkin hyödyllisten arvojen alustamiseen objektin jäsenille. 'No Matching Constructor for Initialization of' -virhe C++:ssa kohdataan, kun konstruktorin ilmoituksessa on virhe. Yleensä C++-kääntäjä luo rakentajan itse, mutta kun käyttäjä on ilmoittanut rakentajat, täytyy olla oikea parametrien ja konstruktorin rungon ilmoitus tällaisten virheiden välttämiseksi.