Jak vyřešit chybu „Žádný odpovídající konstruktor pro inicializaci“ v C++

Jak Vyresit Chybu Zadny Odpovidajici Konstruktor Pro Inicializaci V C



V C++ je konstruktor konkrétní členská funkce, která má svůj název za názvem třídy, ke které se vztahuje. Používá se pro inicializaci některých užitečných hodnot pro členy objektu. Pokud konstruktor není definován uživatelem, kompilátor C++ vygeneruje výchozí konstruktor a neočekává žádné parametry a prázdné tělo. Když však existuje uživatelsky definovaný konstruktor, je nutné deklarovat jeho tělo a parametry.

Co způsobuje chybu „No Matching Constructor for Initialization of“ v C++?

Při práci s konstruktory v C++ se vyskytuje chyba „Žádný odpovídající konstruktor pro inicializaci“, je to obvykle proto, že když je konstruktor nazýván kompilátorem, výchozí konstruktor není vytvořen, takže musíte parametry a tělo konstruktoru deklarovat sami. Selhání při deklaraci správných parametrů vede k tomuto typu chyby konstruktoru.







Vytvořte jednoduchý textový soubor, vložte do něj kód funkce Square() a uložte jej s příponou .h. Nyní vložte tento soubor do složky include složky bin kompilátoru CPP. Nyní, při volání tohoto hlavičkového souboru v main.cpp, bude tento soubor načten kompilátorem.



Soubor záhlaví Square.h

#ifndef SQUARE_H

#define SQUARE_H


třída Náměstí {

soukromé :

dvojnásobek délka ;

dvojnásobek šířka ;

veřejnost :

Náměstí ( dvojnásobek , dvojnásobek ) ;

dvojnásobek getLength ( ) konst ;

dvojnásobek getWidth ( ) konst ;

} ;



Náměstí :: Náměstí ( dvojnásobek l, dvojnásobek v ) {

délka = l ;
šířka = v ;

}



dvojnásobek Náměstí :: getWidth ( ) konst { vrátit se šířka ; }

dvojnásobek Náměstí :: getLength ( ) konst { vrátit se délka ; }



#endif

hlavičkový soubor main.cpp

#include

#include 'square.h'

použitím jmenný prostor std ;



int hlavní ( )

{

Čtvercová krabice 1 ( 10,0 , 10,0 ) ;

Čtvercová krabice 2 ;



cout << ' šířka a délka pole 1: ' << box1. getWidth ( ) << ',' << box1. getLength ( ) << endl ;

cout << ' šířka a délka pole 2: ' << box2. getWidth ( ) << ',' << box2. getLength ( ) << endl ;



box2 = box1 ;

cout << 'Když se Square Box 1 rovná Square Box 2' << endl ;

cout << ' šířka a délka pole 1: ' << box1. getWidth ( ) << ',' << box1. getLength ( ) << endl ;

cout << ' šířka a délka pole 2: ' << box2. getWidth ( ) << ',' << box2. getLength ( ) << endl ;



vrátit se 0 ;

}

V tomto programu uživatel zadá délku a šířku dvou čtvercových rámečků a poté tyto dva rámečky vyrovná a vrátí jejich délku a šířku:




Kompilátor vrátí chybu na řádku č. 14, protože dodavatel očekává dva argumenty, aniž by mu byly poskytnuty žádné argumenty:





Na řádku č. 8 kompilátor vrátí chybu v konstruktoru, protože argumenty nejsou poskytnuty, zatímco musí existovat definované argumenty.

Jak vyřešit chybu „Žádný odpovídající konstruktor pro inicializaci“ v C++

Kompilátor zobrazí chybu na řádku č. 8 kódu main.cpp, protože se pokouší vyvolat výchozí konstruktor Square. Kompilátor nemůže vygenerovat výchozí konstruktor, protože existuje již uživatelem definovaný konstruktor, který přebírá dva argumenty. Proto zadejte jeho parametry jako:



Čtvercová krabice 2 ( 0 , 10 ) ;

Kompilátor vygeneruje výchozí konstruktor pouze v případě, že nemá žádný uživatelsky definovaný konstruktor. Takže v tomto případě, když je definován konstruktor, výchozí konstruktor musí poskytnout uživatel. Pro tento účel tedy poskytněte výchozí argumenty v konstruktoru dvou argumentů také v souboru Square.h. Díky tomu nebudou data neinicializována.

Náměstí :: Náměstí ( dvojnásobek l = 0 , dvojnásobek v = 0 )

Chybu konstruktoru lze opravit zavoláním a deklarací konstruktoru a jeho parametrů správně. Kódy v main.cpp a Square.h se mění podle pokynů uvedených výše. A neodpovídající chyba konstruktoru je vyřešena. Toto je aktualizovaný kód pro soubor záhlaví:

Toto je aktualizovaný kód pro hlavní soubor:

Výše uvedené kódy po chybách ladění vrátí následující výstup:

Šířku a délku dvou čtvercových polí zadá uživatel a vrátí jejich parametry. Později se použije podmínka, aby se obě políčka srovnala, a poté budou vráceny jejich nové odpovídající hodnoty délky a šířky.

Závěr

V C++ je konstruktor konkrétní členská funkce, která má svůj název za názvem třídy, ke které se vztahuje. Používá se pro inicializaci některých užitečných hodnot pro členy objektu. Chyba „No Matching Constructor for Initialization of“ v C++ se objeví, když je chyba v deklaraci konstruktoru. Kompilátor C++ obvykle generuje konstruktor sám, ale když jsou konstruktory deklarovány uživatelem, musí existovat správná deklarace parametrů a těla konstruktoru, aby se předešlo takovým chybám.