Com resoldre l'error 'Sense constructor coincident per a la inicialització de' en C++

Com Resoldre L Error Sense Constructor Coincident Per A La Inicialitzacio De En C



En C++, un constructor és una funció membre particular que pren el seu nom després del nom de la classe amb la qual està relacionada. S'utilitza per a la inicialització d'alguns valors útils per als membres de l'objecte. Si l'usuari no defineix el constructor, el compilador C++ genera un constructor predeterminat i no espera cap paràmetre i un cos buit. Tanmateix, quan hi ha un constructor definit per l'usuari, cal declarar-ne el cos i els paràmetres.

Què causa l'error 'Sense constructor coincident per a la inicialització de' a C++?

Quan es tracta de constructors en C++, s'enfronta l'error 'No hi ha constructor coincident per a la inicialització de', això sol ser perquè quan el compilador anomena un constructor el constructor predeterminat no es crea, de manera que heu de declarar vosaltres mateixos els paràmetres i el cos del constructor. El fet de no declarar els paràmetres adequats provoca aquest tipus d'error del constructor.







Creeu un fitxer de text senzill, enganxeu-hi el codi de la funció Square() i deseu-lo amb l'extensió .h. Ara enganxeu aquest fitxer a la carpeta d'inclusió de la carpeta bin del compilador CPP. Ara, en cridar aquest fitxer de capçalera a main.cpp, aquest fitxer serà llegit pel compilador.



Fitxer de capçalera Square.h

#ifndef SQUARE_H

#definir SQUARE_H


classe Quadrat {

privat :

doble llargada ;

doble amplada ;

públic :

Quadrat ( doble , doble ) ;

doble getLength ( ) const ;

doble getWidth ( ) const ;

} ;



Quadrat :: Quadrat ( doble l, doble En ) {

llargada = l ;
amplada = En ;

}



doble Quadrat :: getWidth ( ) const { tornar amplada ; }

doble Quadrat :: getLength ( ) const { tornar llargada ; }



#endif

Fitxer de capçalera main.cpp

#inclou

#inclou 'quadrat.h'

utilitzant espai de noms std ;



int principal ( )

{

Caixa quadrada 1 ( 10.0 , 10.0 ) ;

Caixa quadrada 2 ;



cout << ' amplada i longitud de la caixa 1: ' << quadre 1. getWidth ( ) << ', ' << quadre 1. getLength ( ) << endl ;

cout << ' amplada i llargada de la caixa 2: ' << quadre 2. getWidth ( ) << ', ' << quadre 2. getLength ( ) << endl ;



quadre 2 = quadre 1 ;

cout << 'Quan la caixa quadrada 1 és igual a la caixa quadrada 2' << endl ;

cout << ' amplada i longitud de la caixa 1: ' << quadre 1. getWidth ( ) << ', ' << quadre 1. getLength ( ) << endl ;

cout << ' amplada i llargada de la caixa 2: ' << quadre 2. getWidth ( ) << ', ' << quadre 2. getLength ( ) << endl ;



tornar 0 ;

}

En aquest programa, l'usuari introdueix la longitud i l'amplada de dues caixes quadrades i després equipara les dues caixes i retorna la seva longitud i amplada:




El compilador retorna l'error a la línia núm. 14 perquè el contractista espera dos arguments mentre que no se li proporcionen cap argument:





A la línia #8 el compilador retorna un error al constructor perquè els arguments no es proporcionen mentre que hi ha d'haver els arguments definits.

Com resoldre l'error 'Sense constructor coincident per a la inicialització de' en C++

El compilador mostra l'error a la línia #8 del codi main.cpp perquè s'intenta invocar el constructor predeterminat de Square. El compilador no pot generar un constructor predeterminat perquè hi ha un constructor ja definit per l'usuari que pren dos arguments. Per tant, especifiqueu els seus paràmetres com:



Caixa quadrada 2 ( 0 , 10 ) ;

Un compilador genera un constructor per defecte només si no té cap constructor definit per l'usuari. Per tant, en aquest cas, quan hi ha un constructor definit, l'usuari ha de proporcionar el constructor per defecte. Per tant, amb aquest propòsit, proporcioneu també arguments predeterminats al constructor de dos arguments al fitxer Square.h. Això no deixa les dades sense inicialitzar.

Quadrat :: Quadrat ( doble l = 0 , doble En = 0 )

L'error del constructor es pot solucionar cridant i declarant correctament el constructor i els seus paràmetres. Els codis de main.cpp i Square.h es canvien d'acord amb les instruccions donades anteriorment. I es resol l'error del constructor que no coincideix. Aquest és el codi actualitzat per al fitxer de capçalera:

Aquest és el codi actualitzat per al fitxer principal:

Els codis anteriors després dels errors de depuració retornen la sortida següent:

L'amplada i la longitud de dues caixes quadrades són proporcionades per l'usuari i es retornen els seus paràmetres. Més tard s'aplica una condició per fer que les dues caixes siguin iguals, i després es retornaran els nous valors de longitud i amplada corresponents.

Conclusió

En C++, un constructor és una funció membre particular que pren el seu nom després del nom de la classe amb la qual està relacionada. S'utilitza per a la inicialització d'alguns valors útils per als membres de l'objecte. L'error 'Sense constructor coincident per a la inicialització de' en C++ s'enfronta quan hi ha un error en la declaració del constructor. Normalment, el compilador C++ genera un constructor per si mateix, però quan els constructors són declarats per l'usuari, cal que hi hagi la declaració adequada dels paràmetres i del cos del constructor per evitar aquests errors.