Kuidas lahendada C++-s viga 'Initsialiseerimiseks pole sobivat konstruktorit'.

Kuidas Lahendada C S Viga Initsialiseerimiseks Pole Sobivat Konstruktorit



C++ puhul on konstruktor konkreetne liigefunktsioon, mis võtab oma nime selle klassi nime järgi, millega see on seotud. Seda kasutatakse objekti liikmete jaoks mõne kasuliku väärtuse lähtestamiseks. Kui kasutaja ei ole konstruktorit defineerinud, genereerib C++ kompilaator vaikekonstruktori ja eeldab, et parameetreid pole ja keha on tühi. Kui aga on olemas kasutaja määratud konstruktor, on vaja deklareerida selle keha ja parameetrid.

Mis põhjustab C++-is tõrke 'Initsialiseerimiseks pole sobivat konstruktorit'?

C++-s konstruktoritega tegelemisel ilmneb tõrge “No Matching Constructor for Initialization of” on tavaliselt tingitud sellest, et kui konstruktorit nimetab kompilaator, siis vaikekonstruktorit ei looda, seega peate konstruktori parameetrid ja keha ise deklareerima. Õigete parameetrite deklareerimata jätmine põhjustab seda tüüpi konstruktoriviga.







Looge lihtne tekstifail, kleepige sellesse funktsiooni Square() kood ja salvestage see laiendiga .h. Nüüd kleepige see fail CPP-kompilaatori prügikasti kausta. Nüüd, kui kutsute seda päisefaili saidil main.cpp, loeb kompilaator seda faili.



Square.h päisefail

#ifndef SQUARE_H

#define SQUARE_H


klass Ruut {

privaatne :

kahekordne pikkus ;

kahekordne laius ;

avalik :

Ruut ( kahekordne , kahekordne ) ;

kahekordne getLength ( ) konst ;

kahekordne getWidth ( ) konst ;

} ;



Ruut :: Ruut ( kahekordne l, kahekordne sisse ) {

pikkus = l ;
laius = sisse ;

}



kahekordne Ruut :: getWidth ( ) konst { tagasi laius ; }

kahekordne Ruut :: getLength ( ) konst { tagasi pikkus ; }



#endif

main.cpp päisefail

#include

#include 'ruut.h'

kasutades nimeruum std ;



int peamine ( )

{

Ruudukast1 ( 10.0 , 10.0 ) ;

Ruudukast2 ;



cout << ' kasti 1 laius ja pikkus: ' << kast1. getWidth ( ) << ', ' << kast1. getLength ( ) << endl ;

cout << ' kasti 2 laius ja pikkus: ' << kast2. getWidth ( ) << ', ' << kast2. getLength ( ) << endl ;



kast2 = kast1 ;

cout << 'Kui ruutkast 1 võrdub ruutkastiga 2' << endl ;

cout << ' kasti 1 laius ja pikkus: ' << kast1. getWidth ( ) << ', ' << kast1. getLength ( ) << endl ;

cout << ' kasti 2 laius ja pikkus: ' << kast2. getWidth ( ) << ', ' << kast2. getLength ( ) << endl ;



tagasi 0 ;

}

Selles programmis sisestab kasutaja kahe ruudukujulise kasti pikkuse ja laiuse ning seejärel võrdsustab need kaks kasti ning tagastab nende pikkuse ja laiuse:




Kompilaator tagastab vea real#14, kuna töövõtja ootab kahte argumenti, samas kui argumente pole esitatud:





8. real tagastab kompilaator konstruktoris vea, kuna argumente ei esitata, samas kui määratletud argumendid peavad olema.

Kuidas lahendada C++-s viga 'Initsialiseerimiseks pole sobivat konstruktorit'.

Kompilaator kuvab vea koodi main.cpp real#8, kuna proovitakse välja kutsuda Square'i vaikekonstruktorit. Kompilaator ei saa luua vaikekonstruktorit, kuna on juba kasutaja määratud konstruktor, mis võtab kaks argumenti. Seetõttu määrake selle parameetrid järgmiselt:



Ruudukast2 ( 0 , 10 ) ;

Kompilaator loob vaikekonstruktori ainult siis, kui sellel pole kasutaja määratud konstruktorit. Nii et sel juhul, kui konstruktor on määratletud, peab kasutaja esitama vaikekonstruktori. Seetõttu esitage faili Square.h kahe argumendiga konstruktoris ka vaikeargumendid. See ei jäta andmeid initsialiseerimata.

Ruut :: Ruut ( kahekordne l = 0 , kahekordne sisse = 0 )

Konstruktorivea saab parandada, kutsudes ja deklareerides õigesti konstruktori ja selle parameetrid. Main.cpp ja Square.h koode muudetakse vastavalt ülaltoodud juhistele. Ja mittevastav konstruktori viga on lahendatud. See on päisefaili värskendatud kood:

See on põhifaili värskendatud kood:

Ülaltoodud koodid tagastavad pärast silumisvigu järgmise väljundi:

Kahe ruudu kasti laiuse ja pikkuse määrab kasutaja ning tagastatakse nende parameetrid. Hiljem rakendatakse tingimus, et mõlemad kastid oleksid võrdsed, ja seejärel tagastatakse nende uued vastavad pikkuse ja laiuse väärtused.

Järeldus

C++ puhul on konstruktor konkreetne liigefunktsioon, mis võtab oma nime selle klassi nime järgi, millega see on seotud. Seda kasutatakse objekti liikmete jaoks mõne kasuliku väärtuse lähtestamiseks. Kui konstruktori deklaratsioonis on viga, ilmneb C++ tõrge 'Initsialiseerimiseks puudub sobiv konstruktor'. Tavaliselt genereerib C++ kompilaator ise konstruktori, kuid kui kasutaja on konstruktorid deklareerinud, peab selliste vigade vältimiseks olema parameetrite ja konstruktori keha õige deklaratsioon.