Slik løser du 'Ingen matchende konstruktør for initialisering av'-feil i C++

Slik Loser Du Ingen Matchende Konstruktor For Initialisering Av Feil I C



I C++ er en konstruktør en bestemt medlemsfunksjon som tar navnet etter navnet på klassen den er relatert til. Den brukes til initialisering av noen nyttige verdier for medlemmene av objektet. Hvis konstruktøren ikke er definert av brukeren, genererer C++-kompilatoren en standardkonstruktør og forventer ingen parametere og en tom kropp. Men når det er en brukerdefinert konstruktør, er det nødvendig å deklarere dens kropp og parametere.

Hva forårsaker 'No Matching Constructor for Initialization of'-feilen i C++?

Når du har å gjøre med konstruktører i C++ 'No Matching Constructor for Initialization of' oppstår feil, dette er vanligvis fordi når en konstruktør kalles, er standardkonstruktøren ikke opprettet av kompilatoren, så du må deklarere parameterne og kroppen til konstruktøren selv. Unnlatelse av å deklarere riktige parametere resulterer i denne typen konstruktørfeil.







Lag en enkel tekstfil, lim inn koden til Square()-funksjonen i den, og lagre den med filtypen .h. Lim nå denne filen inn i include-mappen i CPP-kompilatorens bin-mappe. Nå, når du kaller denne overskriftsfilen i main.cpp, vil denne filen bli lest av kompilatoren.



Square.h Header-fil

#ifndef SQUARE_H

#define SQUARE_H


klasse Torget {

privat :

dobbelt lengde ;

dobbelt bredde ;

offentlig :

Torget ( dobbelt , dobbelt ) ;

dobbelt getLength ( ) konst ;

dobbelt getWidth ( ) konst ;

} ;



Torget :: Torget ( dobbelt jeg, dobbelt I ) {

lengde = l ;
bredde = I ;

}



dobbelt Torget :: getWidth ( ) konst { komme tilbake bredde ; }

dobbelt Torget :: getLength ( ) konst { komme tilbake lengde ; }



#slutt om

main.cpp Header-fil

#include

#inkluder 'square.h'

ved hjelp av navneområde std ;



int hoved- ( )

{

Firkantet boks1 ( 10,0 , 10,0 ) ;

Firkantet boks2 ;



cout << ' bredde og lengde på boks 1: ' << boks1. getWidth ( ) << ', ' << boks1. getLength ( ) << endl ;

cout << ' bredde og lengde på boks 2: ' << boks 2. getWidth ( ) << ', ' << boks 2. getLength ( ) << endl ;



boks 2 = boks1 ;

cout << 'Når Square Box 1 er lik Square Box 2' << endl ;

cout << ' bredde og lengde på boks 1: ' << boks1. getWidth ( ) << ', ' << boks1. getLength ( ) << endl ;

cout << ' bredde og lengde på boks 2: ' << boks 2. getWidth ( ) << ', ' << boks 2. getLength ( ) << endl ;



komme tilbake 0 ;

}

I dette programmet legger brukeren inn lengden og bredden til to firkantede bokser og likestiller deretter de to boksene og returnerer lengden og bredden deres:




Kompilatoren returnerer feilen i linje #14 fordi entreprenøren forventer to argumenter mens det ikke er noen argumenter gitt til den:





I linje #8 returnerer kompilatoren en feil i konstruktøren fordi argumentene ikke er gitt mens det må være de definerte argumentene.

Slik løser du 'Ingen matchende konstruktør for initialisering av'-feil i C++

Kompilatoren viser feilen i linje nr. 8 i main.cpp-koden fordi standardkonstruktøren til Square er forsøkt å starte. Kompilatoren kan ikke generere en standardkonstruktør fordi det er en allerede brukerdefinert konstruktør som tar to argumenter. Spesifiser derfor parameterne som:



Firkantet boks2 ( 0 , 10 ) ;

En kompilator genererer en standardkonstruktør bare hvis den ikke har noen brukerdefinert konstruktør. Så her i dette tilfellet når det er en konstruktør definert, må standardkonstruktøren leveres av brukeren. Så, for dette formålet, oppgi standardargumenter i to-argument-konstruktøren i Square.h-filen også. Dette etterlater ikke dataene uinitialisert.

Torget :: Torget ( dobbelt l = 0 , dobbelt I = 0 )

Konstruktørfeilen kan fikses ved å kalle og deklarere konstruktøren og dens parametere riktig. Kodene i main.cpp og Square.h endres i henhold til instruksjonene gitt ovenfor. Og konstruktørfeilen som ikke samsvarer, er løst. Dette er den oppdaterte koden for overskriftsfilen:

Dette er den oppdaterte koden for hovedfilen:

Kodene ovenfor etter feilsøkingsfeil returnerer følgende utgang:

Bredden og lengden på to firkantede bokser oppgis av brukeren, og parametrene deres returneres. Senere brukes en betingelse for å gjøre begge boksene like, og deretter vil deres nye tilsvarende lengde- og breddeverdier bli returnert.

Konklusjon

I C++ er en konstruktør en bestemt medlemsfunksjon som tar navnet etter navnet på klassen den er relatert til. Den brukes til initialisering av noen nyttige verdier for medlemmene av objektet. 'No Matching Constructor for Initialization of'-feilen i C++ står overfor når det er en feil i erklæringen til konstruktøren. Vanligvis genererer C++-kompilatoren en konstruktør selv, men når konstruktørene er deklarert av brukeren, må det være riktig deklarasjon av parametere og kroppen til konstruktøren for å unngå å møte slike feil.