Kako razrešiti napako »Ni ustreznega konstruktorja za inicializacijo« v C++

Kako Razresiti Napako Ni Ustreznega Konstruktorja Za Inicializacijo V C



V C++ je konstruktor določena funkcija članica, ki prevzame svoje ime po imenu razreda, s katerim je povezana. Uporablja se za inicializacijo nekaterih uporabnih vrednosti za člane objekta. Če uporabnik ne definira konstruktorja, prevajalnik C++ ustvari privzeti konstruktor in ne pričakuje parametrov in prazno telo. Če pa obstaja uporabniško definiran konstruktor, je treba deklarirati njegovo telo in parametre.

Kaj povzroča napako »Ni ujemajočega se konstruktorja za inicializacijo« v C++?

Ko imate opravka s konstruktorji v C++, pride do napake »Ni ujemajočega se konstruktorja za inicializacijo«, to je običajno zato, ker ko prevajalnik pokliče konstruktor, privzeti konstruktor ni ustvarjen, zato morate sami deklarirati parametre in telo konstruktorja. Če ne navedete ustreznih parametrov, pride do te vrste napake konstruktorja.







Ustvarite preprosto besedilno datoteko, vanjo prilepite kodo funkcije Square() in jo shranite s pripono .h. Zdaj prilepite to datoteko v mapo za vključitev mape bin prevajalnika CPP. Zdaj, ko pokličete to datoteko glave v main.cpp, bo to datoteko prebral prevajalnik.



Datoteka glave Square.h

#ifndef SQUARE_H

#define SQUARE_H


razred kvadrat {

zasebno :

dvojno dolžina ;

dvojno premer ;

javnosti :

kvadrat ( dvojno , dvojno ) ;

dvojno getLength ( ) konst ;

dvojno getWidth ( ) konst ;

} ;



kvadrat :: kvadrat ( dvojno l, dvojno notri ) {

dolžina = l ;
premer = notri ;

}



dvojno kvadrat :: getWidth ( ) konst { vrnitev premer ; }

dvojno kvadrat :: getLength ( ) konst { vrnitev dolžina ; }



#endif

glavna datoteka main.cpp

#include

#include 'square.h'

uporabo imenski prostor std ;



int glavni ( )

{

Kvadratna škatla 1 ( 10.0 , 10.0 ) ;

Kvadratna škatla 2 ;



cout << ' širina in dolžina polja 1: ' << box1. getWidth ( ) << ', ' << box1. getLength ( ) << konec ;

cout << ' širina in dolžina polja 2: ' << škatla2. getWidth ( ) << ', ' << škatla2. getLength ( ) << konec ;



škatla2 = box1 ;

cout << ' Ko je Square Box 1 enak Square Box 2 ' << konec ;

cout << ' širina in dolžina polja 1: ' << box1. getWidth ( ) << ', ' << box1. getLength ( ) << konec ;

cout << ' širina in dolžina polja 2: ' << škatla2. getWidth ( ) << ', ' << škatla2. getLength ( ) << konec ;



vrnitev 0 ;

}

V tem programu uporabnik vnese dolžino in širino dveh kvadratnih polj in nato izenači obe polji ter vrne njuno dolžino in širino:




Prevajalnik vrne napako v vrstici št. 14, ker izvajalec pričakuje dva argumenta, medtem ko mu ni posredovan noben argument:





V vrstici št. 8 vrne prevajalnik napako v konstruktorju, ker argumenti niso podani, medtem ko morajo obstajati definirani argumenti.

Kako razrešiti napako »Ni ustreznega konstruktorja za inicializacijo« v C++

Prevajalnik prikaže napako v vrstici št. 8 kode main.cpp, ker se poskuša priklicati privzeti konstruktor Square. Prevajalnik ne more ustvariti privzetega konstruktorja, ker že obstaja uporabniško definiran konstruktor, ki sprejme dva argumenta. Zato določite njegove parametre kot:



Kvadratna škatla 2 ( 0 , 10 ) ;

Prevajalnik ustvari privzeti konstruktor le, če nima nobenega uporabniško definiranega konstruktorja. Torej v tem primeru, ko je definiran konstruktor, mora privzeti konstruktor zagotoviti uporabnik. Zato v ta namen zagotovite tudi privzete argumente v konstruktorju z dvema argumentoma v datoteki Square.h. S tem podatki ne ostanejo neinicializirani.

kvadrat :: kvadrat ( dvojno l = 0 , dvojno notri = 0 )

Napako konstruktorja lahko popravite s klicem in pravilno deklaracijo konstruktorja in njegovih parametrov. Kodi v main.cpp in Square.h se spremenita v skladu z zgornjimi navodili. In napaka konstruktorja brez ujemanja je odpravljena. To je posodobljena koda za datoteko glave:

To je posodobljena koda za glavno datoteko:

Zgornje kode po napakah pri odpravljanju napak vrnejo naslednje rezultate:

Širina in dolžina dveh kvadratnih polj je podana s strani uporabnika, njuni parametri pa so vrnjeni. Kasneje se uporabi pogoj, da sta oba polja enaka, nato pa bosta vrnjeni njuni novi ustrezni vrednosti dolžine in širine.

Zaključek

V C++ je konstruktor določena funkcija članica, ki prevzame svoje ime po imenu razreda, s katerim je povezana. Uporablja se za inicializacijo nekaterih uporabnih vrednosti za člane objekta. Napaka »Ni ujemajočega se konstruktorja za inicializacijo« v C++ se pojavi, ko je v deklaraciji konstruktorja napaka. Običajno prevajalnik C++ sam generira konstruktor, toda ko konstruktorje deklarira uporabnik, mora obstajati ustrezna deklaracija parametrov in telesa konstruktorja, da se izognemo soočanju s takšnimi napakami.