Kako riješiti pogrešku 'Nema odgovarajućeg konstruktora za inicijalizaciju' u C++

Kako Rijesiti Pogresku Nema Odgovarajuceg Konstruktora Za Inicijalizaciju U C



U C++-u konstruktor je određena funkcija članica koja dobiva svoje ime po imenu klase s kojom je povezana. Koristi se za inicijalizaciju nekih korisnih vrijednosti za članove objekta. Ako konstruktor nije definiran od strane korisnika, C++ prevodilac generira zadani konstruktor i ne očekuje parametre i prazno tijelo. Međutim, kada postoji korisnički definiran konstruktor, potrebno je deklarirati njegovo tijelo i parametre.

Što uzrokuje pogrešku 'Nema odgovarajućeg konstruktora za inicijalizaciju' u C++?

Kada se radi s konstruktorima u C++-u pojavljuje se pogreška 'Nema odgovarajućeg konstruktora za inicijalizaciju', to je obično zato što kada se konstruktor pozove, kompajler ne stvara zadani konstruktor, pa morate sami deklarirati parametre i tijelo konstruktora. Neuspijevanje deklariranja odgovarajućih parametara rezultira ovom vrstom pogreške konstruktora.







Napravite jednostavnu tekstualnu datoteku, u nju zalijepite kôd funkcije Square() i spremite je s nastavkom .h. Sada zalijepite ovu datoteku u mapu uključivanja mape bin CPP prevoditelja. Sada, prilikom pozivanja ove datoteke zaglavlja u main.cpp, ovu će datoteku pročitati kompajler.



Square.h datoteka zaglavlja

#ifndef SQUARE_H

#definiraj SQUARE_H


razreda Kvadrat {

privatna :

dvostruko duljina ;

dvostruko širina ;

javnost :

Kvadrat ( dvostruko , dvostruko ) ;

dvostruko getLength ( ) konst ;

dvostruko getWidth ( ) konst ;

} ;



Kvadrat :: Kvadrat ( dvostruko l, dvostruko U ) {

duljina = l ;
širina = U ;

}



dvostruko Kvadrat :: getWidth ( ) konst { povratak širina ; }

dvostruko Kvadrat :: getLength ( ) konst { povratak duljina ; }



#završi ako

main.cpp datoteka zaglavlja

#include

#include 'square.h'

korištenjem imenski prostor std ;



int glavni ( )

{

Kvadratna kutija 1 ( 10.0 , 10.0 ) ;

Kvadratna kutija 2 ;



cout << ' širina i duljina okvira 1: ' << kutija1. getWidth ( ) << ', ' << kutija1. getLength ( ) << endl ;

cout << ' širina i duljina okvira 2: ' << kutija2. getWidth ( ) << ', ' << kutija2. getLength ( ) << endl ;



kutija2 = kutija1 ;

cout << ' Kada je Square Box 1 jednak Square Box 2 ' << endl ;

cout << ' širina i duljina okvira 1: ' << kutija1. getWidth ( ) << ', ' << kutija1. getLength ( ) << endl ;

cout << ' širina i duljina okvira 2: ' << kutija2. getWidth ( ) << ', ' << kutija2. getLength ( ) << endl ;



povratak 0 ;

}

U ovom programu korisnik unosi duljinu i širinu dva kvadratna okvira, a zatim izjednačava dva okvira i vraća njihovu duljinu i širinu:




Kompajler vraća pogrešku u retku #14 jer izvođač očekuje dva argumenta dok mu nema argumenata:





U liniji #8 prevodilac vraća pogrešku u konstruktoru jer argumenti nisu navedeni, a moraju postojati definirani argumenti.

Kako riješiti pogrešku 'Nema odgovarajućeg konstruktora za inicijalizaciju' u C++

Kompajler prikazuje pogrešku u retku #8 koda main.cpp jer se pokušava pozvati zadani konstruktor Squarea. Prevodilac ne može generirati zadani konstruktor jer već postoji korisnički definiran konstruktor koji uzima dva argumenta. Stoga odredite njegove parametre kao:



Kvadratna kutija 2 ( 0 , 10 ) ;

Prevodilac generira zadani konstruktor samo ako nema korisnički definiran konstruktor. Dakle, ovdje u ovom slučaju kada postoji definiran konstruktor, zadani konstruktor mora dati korisnik. Dakle, u tu svrhu također navedite zadane argumente u konstruktoru s dva argumenta u datoteci Square.h. Ovo ne ostavlja podatke neinicijalizirane.

Kvadrat :: Kvadrat ( dvostruko l = 0 , dvostruko U = 0 )

Pogreška konstruktora može se popraviti pozivom i pravilnim deklariranjem konstruktora i njegovih parametara. Kodovi u main.cpp i Square.h mijenjaju se prema gore navedenim uputama. I pogreška konstruktora bez podudaranja je riješena. Ovo je ažurirani kod za datoteku zaglavlja:

Ovo je ažurirani kod za glavnu datoteku:

Gornji kodovi nakon otklanjanja pogrešaka vraćaju sljedeći izlaz:

Širina i duljina dva kvadratna okvira daje korisnik, a njihovi parametri se vraćaju. Kasnije se primjenjuje uvjet da oba okvira budu jednaka, a zatim će se vratiti njihove nove odgovarajuće vrijednosti duljine i širine.

Zaključak

U C++-u konstruktor je određena funkcija članica koja dobiva svoje ime po imenu klase s kojom je povezana. Koristi se za inicijalizaciju nekih korisnih vrijednosti za članove objekta. Pogreška 'Nema odgovarajućeg konstruktora za inicijalizaciju' u C++ pojavljuje se kada postoji pogreška u deklaraciji konstruktora. Obično C++ prevoditelj sam generira konstruktor, ali kada korisnik deklarira konstruktore, mora postojati ispravna deklaracija parametara i tijela konstruktora kako bi se izbjeglo suočavanje s takvim pogreškama.