Hoe u de fout ‘Geen overeenkomende constructor voor initialisatie van’ in C++ kunt oplossen

Hoe U De Fout Geen Overeenkomende Constructor Voor Initialisatie Van In C Kunt Oplossen



In C++ is een constructor een bepaalde lidfunctie die zijn naam ontleent aan de naam van de klasse waaraan hij gerelateerd is. Het wordt gebruikt voor de initialisatie van enkele nuttige waarden voor de leden van het object. Als de constructor niet door de gebruiker is gedefinieerd, genereert de C++-compiler een standaardconstructor en verwacht hij geen parameters en een lege body. Als er echter een door de gebruiker gedefinieerde constructor is, is het noodzakelijk om de hoofdtekst en parameters ervan te declareren.

Wat veroorzaakt de fout ‘Geen overeenkomende constructor voor initialisatie van’ in C++?

Bij het omgaan met constructors in C++ wordt de fout “No Matching Constructor for Initialization of” geconfronteerd. Dit komt meestal doordat wanneer een constructor wordt aangeroepen, de standaardconstructor door de compiler niet wordt gemaakt, dus u moet de parameters en de hoofdtekst van de constructor zelf declareren. Het niet declareren van de juiste parameters resulteert in dit type constructorfout.







Maak een eenvoudig tekstbestand, plak de code van de Square()-functie erin en sla het op met de .h-extensie. Plak dit bestand nu in de map include van de bin-map van de CPP-compiler. Wanneer dit headerbestand nu in main.cpp wordt aangeroepen, wordt dit bestand door de compiler gelezen.



Square.h headerbestand

#ifndef SQUARE_H

#define VIERKANT_H


klas Vierkant {

privaat :

dubbele lengte ;

dubbele breedte ;

openbaar :

Vierkant ( dubbele , dubbele ) ;

dubbele lengte krijgen ( ) const ;

dubbele haalBreedte ( ) const ;

} ;



Vierkant :: Vierkant ( dubbele ik, dubbele In ) {

lengte = l ;
breedte = In ;

}



dubbele Vierkant :: haalBreedte ( ) const { opbrengst breedte ; }

dubbele Vierkant :: lengte krijgen ( ) const { opbrengst lengte ; }



#stop als

headerbestand main.cpp

#include

#include 'vierkant.h'

gebruik makend van naamruimte soa ;



int voornaamst ( )

{

Vierkante doos1 ( 10.0 , 10.0 ) ;

Vierkante doos2 ;



uit << ' breedte en lengte van vak 1: ' << doos1. haalBreedte ( ) << ', ' << doos1. lengte krijgen ( ) << eindl ;

uit << ' breedte en lengte van vak 2: ' << doos2. haalBreedte ( ) << ', ' << doos2. lengte krijgen ( ) << eindl ;



doos2 = doos1 ;

uit << 'Als vierkante doos 1 gelijk is aan vierkante doos 2' << eindl ;

uit << ' breedte en lengte van vak 1: ' << doos1. haalBreedte ( ) << ', ' << doos1. lengte krijgen ( ) << eindl ;

uit << ' breedte en lengte van vak 2: ' << doos2. haalBreedte ( ) << ', ' << doos2. lengte krijgen ( ) << eindl ;



opbrengst 0 ;

}

In dit programma voert de gebruiker de lengte en breedte van twee vierkante dozen in, stelt vervolgens de twee dozen gelijk en retourneert hun lengte en breedte:




De compiler retourneert de fout in regel #14 omdat de contractant twee argumenten verwacht, terwijl er geen argumenten aan worden gegeven:





In regel #8 retourneert de compiler een fout in de constructor omdat de argumenten niet worden opgegeven, terwijl er wel gedefinieerde argumenten moeten zijn.

Hoe u de fout ‘Geen overeenkomende constructor voor initialisatie van’ in C++ kunt oplossen

De compiler geeft de fout weer in regel #8 van de code main.cpp, omdat wordt geprobeerd de standaardconstructor van Square aan te roepen. De compiler kan geen standaardconstructor genereren omdat er al een door de gebruiker gedefinieerde constructor is waaraan twee argumenten moeten doorgegeven worden. Specificeer daarom de parameters als:



Vierkante doos2 ( 0 , 10 ) ;

Een compiler genereert alleen een standaardconstructor als deze geen door de gebruiker gedefinieerde constructor heeft. Dus in dit geval, als er een constructor is gedefinieerd, moet de standaardconstructor door de gebruiker worden opgegeven. Geef voor dit doel dus ook standaardargumenten op in de constructor met twee argumenten in het bestand Square.h. Hierdoor blijven de gegevens niet ongeïnitialiseerd.

Vierkant :: Vierkant ( dubbele l = 0 , dubbele In = 0 )

De constructorfout kan worden verholpen door de constructor en zijn parameters correct aan te roepen en te declareren. De codes in main.cpp en Square.h worden gewijzigd volgens de hierboven gegeven instructies. En de niet-overeenkomende constructorfout is opgelost. Dit is de bijgewerkte code voor het headerbestand:

Dit is de bijgewerkte code voor het hoofdbestand:

De bovenstaande codes retourneren na foutopsporingsfouten de volgende uitvoer:

De breedte en lengte van twee vierkante vakken worden door de gebruiker opgegeven en hun parameters worden geretourneerd. Later wordt een voorwaarde toegepast om beide vakken gelijk te maken, en vervolgens worden hun nieuwe corresponderende lengte- en breedtewaarden geretourneerd.

Conclusie

In C++ is een constructor een bepaalde lidfunctie die zijn naam ontleent aan de naam van de klasse waaraan hij gerelateerd is. Het wordt gebruikt voor de initialisatie van enkele nuttige waarden voor de leden van het object. De fout ‘Geen overeenkomende constructor voor initialisatie van’ in C++ wordt geconfronteerd als er een fout is in de declaratie van de constructor. Normaal gesproken genereert de C++-compiler zelf een constructor, maar wanneer de constructors door de gebruiker worden gedeclareerd, moet er de juiste declaratie van parameters en hoofdtekst van de constructor zijn om dergelijke fouten te voorkomen.