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.