Sådan løses 'Ingen matchende konstruktør til initialisering af' fejl i C++

Sadan Loses Ingen Matchende Konstruktor Til Initialisering Af Fejl I C



I C++ er en konstruktør en bestemt medlemsfunktion, der tager sit navn efter navnet på den klasse, den er relateret til. Det bruges til initialisering af nogle nyttige værdier for objektets medlemmer. Hvis konstruktøren ikke er defineret af brugeren, genererer C++-kompileren en standardkonstruktør og forventer ingen parametre og en tom krop. Men når der er en brugerdefineret konstruktør, er det nødvendigt at erklære dens krop og parametre.

Hvad forårsager fejlen 'Ingen matchende konstruktør til initialisering af' i C++?

Når man beskæftiger sig med konstruktører i C++, opstår fejlen 'No Matching Constructor for Initialization of', dette skyldes normalt, at når en konstruktør kaldes, oprettes standardkonstruktøren af ​​compileren ikke, så du skal selv erklære konstruktørens parametre og krop. Undladelse af at erklære korrekte parametre resulterer i denne type konstruktørfejl.







Opret en simpel tekstfil, indsæt koden for Square()-funktionen i den, og gem den med filtypen .h. Indsæt nu denne fil i include-mappen i CPP-kompilerens bin-mappe. Når du nu kalder denne header-fil i main.cpp, vil denne fil blive læst af compileren.



Square.h Header-fil

#ifndef SQUARE_H

#define SQUARE_H


klasse Firkant {

privat :

dobbelt længde ;

dobbelt bredde ;

offentlig :

Firkant ( dobbelt , dobbelt ) ;

dobbelt getLængde ( ) konst ;

dobbelt getWidth ( ) konst ;

} ;



Firkant :: Firkant ( dobbelt l, dobbelt I ) {

længde = l ;
bredde = I ;

}



dobbelt Firkant :: getWidth ( ) konst { Vend tilbage bredde ; }

dobbelt Firkant :: getLængde ( ) konst { Vend tilbage længde ; }



#Afslut Hvis

main.cpp Header-fil

#include

#include 'square.h'

ved brug af navneområde std ;



int vigtigste ( )

{

Firkantet kasse 1 ( 10,0 , 10,0 ) ;

Firkantet kasse 2 ;



cout << ' bredde og længde af boks 1: ' << kasse 1. getWidth ( ) << ', ' << kasse 1. getLængde ( ) << endl ;

cout << ' bredde og længde af boks 2: ' << kasse 2. getWidth ( ) << ', ' << kasse 2. getLængde ( ) << endl ;



kasse 2 = kasse 1 ;

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

cout << ' bredde og længde af boks 1: ' << kasse 1. getWidth ( ) << ', ' << kasse 1. getLængde ( ) << endl ;

cout << ' bredde og længde af boks 2: ' << kasse 2. getWidth ( ) << ', ' << kasse 2. getLængde ( ) << endl ;



Vend tilbage 0 ;

}

I dette program indtaster brugeren længden og bredden af ​​to firkantede felter og sidestiller derefter de to felter og returnerer deres længde og bredde:




Compileren returnerer fejlen i linje #14, fordi entreprenøren forventer to argumenter, mens der ikke er givet argumenter til den:





I linje #8 returnerer compileren en fejl i konstruktøren, fordi argumenterne ikke er angivet, mens der skal være de definerede argumenter.

Sådan løses 'Ingen matchende konstruktør til initialisering af' fejl i C++

Compileren viser fejlen i linje #8 i main.cpp-koden, fordi standardkonstruktøren af ​​Square er forsøgt at kalde. Compileren kan ikke generere en standardkonstruktør, fordi der er en allerede brugerdefineret konstruktør, der tager to argumenter. Angiv derfor dens parametre som:



Firkantet kasse 2 ( 0 , 10 ) ;

En compiler genererer kun en standardkonstruktør, hvis den ikke har nogen brugerdefineret konstruktør. Så her i dette tilfælde, hvor der er defineret en konstruktør, skal standardkonstruktøren leveres af brugeren. Så til dette formål skal du også angive standardargumenter i to-argument-konstruktøren i Square.h-filen. Dette efterlader ikke dataene uinitialiseret.

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

Konstruktørfejlen kan rettes ved at kalde og erklære konstruktøren og dens parametre korrekt. Koderne i main.cpp og Square.h ændres i henhold til instruktionerne ovenfor. Og konstruktorfejlen, der ikke matcher, er løst. Dette er den opdaterede kode til header-filen:

Dette er den opdaterede kode til hovedfilen:

Ovenstående koder efter fejlretningsfejl returnerer følgende output:

Bredden og længden af ​​to firkantede kasser leveres af brugeren, og deres parametre returneres. Senere anvendes en betingelse for at gøre begge kasser ens, og derefter vil deres nye tilsvarende længde- og breddeværdier blive returneret.

Konklusion

I C++ er en konstruktør en bestemt medlemsfunktion, der tager sit navn efter navnet på den klasse, den er relateret til. Det bruges til initialisering af nogle nyttige værdier for medlemmerne af objektet. Fejlen 'Ingen matchende konstruktør til initialisering af' i C++ står over for, når der er en fejl i konstruktørens erklæring. Normalt genererer C++-kompileren selv en konstruktør, men når konstruktørerne erklæres af brugeren, skal der være den korrekte deklaration af parametre og krop for konstruktøren for at undgå at støde på sådanne fejl.