C++లో కన్స్ట్రక్టర్ అనేది ఒక నిర్దిష్ట సభ్యుని ఫంక్షన్, అది దానికి సంబంధించిన తరగతి పేరు తర్వాత దాని పేరును తీసుకుంటుంది. ఇది ఆబ్జెక్ట్ సభ్యులకు కొన్ని ఉపయోగకరమైన విలువలను ప్రారంభించడం కోసం ఉపయోగించబడుతుంది. కన్స్ట్రక్టర్ వినియోగదారుచే నిర్వచించబడకపోతే, C++ కంపైలర్ డిఫాల్ట్ కన్స్ట్రక్టర్ని ఉత్పత్తి చేస్తుంది మరియు పారామీటర్లు మరియు ఖాళీ బాడీని ఆశించదు. అయినప్పటికీ, వినియోగదారు నిర్వచించిన కన్స్ట్రక్టర్ ఉన్నప్పుడు, దాని శరీరం మరియు పారామితులను ప్రకటించడం అవసరం.
C++లో “ఇనిషియలైజేషన్ కోసం సరిపోలే కన్స్ట్రక్టర్ లేదు” లోపానికి కారణమేమిటి?
C++లో కన్స్ట్రక్టర్లతో వ్యవహరించేటప్పుడు “ఇనిషియలైజేషన్ కోసం మ్యాచింగ్ కన్స్ట్రక్టర్ లేదు” లోపం సాధారణంగా ఎదురవుతుంది ఎందుకంటే కంపైలర్ ద్వారా కన్స్ట్రక్టర్ని డిఫాల్ట్ కన్స్ట్రక్టర్ అని పిలిచినప్పుడు సృష్టించబడదు, కాబట్టి మీరు స్వయంగా కన్స్ట్రక్టర్ యొక్క పారామీటర్లు మరియు బాడీని ప్రకటించాలి. సరైన పారామితులను ప్రకటించడంలో విఫలమైతే ఈ రకమైన కన్స్ట్రక్టర్ లోపం ఏర్పడుతుంది.
ఒక సాధారణ టెక్స్ట్ ఫైల్ను సృష్టించండి, స్క్వేర్() ఫంక్షన్ కోడ్ను అందులో అతికించండి మరియు దానిని .h పొడిగింపుతో సేవ్ చేయండి. ఇప్పుడు ఈ ఫైల్ను CPP కంపైలర్ యొక్క బిన్ ఫోల్డర్లోని చేర్చబడిన ఫోల్డర్లో అతికించండి. ఇప్పుడు, ఈ హెడర్ ఫైల్ను main.cppలో కాల్ చేసినప్పుడు, ఈ ఫైల్ కంపైలర్ ద్వారా చదవబడుతుంది.
Square.h హెడర్ ఫైల్
#ifndef SQUARE_H#SQUARE_Hని నిర్వచించండి
తరగతి చతురస్రం {
ప్రైవేట్ :
రెట్టింపు పొడవు ;
రెట్టింపు వెడల్పు ;
ప్రజా :
చతురస్రం ( రెట్టింపు , రెట్టింపు ) ;
రెట్టింపు పొడవు ( ) స్థిరంగా ;
రెట్టింపు getWidth ( ) స్థిరంగా ;
} ;
చతురస్రం :: చతురస్రం ( రెట్టింపు l, రెట్టింపు లో ) {
పొడవు = ఎల్ ;
వెడల్పు = లో ;
}
రెట్టింపు చతురస్రం :: getWidth ( ) స్థిరంగా { తిరిగి వెడల్పు ; }
రెట్టింపు చతురస్రం :: పొడవు ( ) స్థిరంగా { తిరిగి పొడవు ; }
#ఎండిఫ్
main.cpp హెడర్ ఫైల్
##'square.h'ని చేర్చండి
ఉపయోగించి నేమ్స్పేస్ std ;
int ప్రధాన ( )
{
స్క్వేర్ బాక్స్ 1 ( 10.0 , 10.0 ) ;
స్క్వేర్ బాక్స్ 2 ;
కోట్ << 'బాక్స్ 1 వెడల్పు మరియు పొడవు:' << బాక్స్1. getWidth ( ) << ',' << బాక్స్1. పొడవు ( ) << endl ;
కోట్ << 'బాక్స్ 2 వెడల్పు మరియు పొడవు:' << పెట్టె 2. getWidth ( ) << ',' << పెట్టె 2. పొడవు ( ) << endl ;
పెట్టె 2 = బాక్స్1 ;
కోట్ << 'స్క్వేర్ బాక్స్ 1 స్క్వేర్ బాక్స్ 2కి సమానం అయినప్పుడు' << endl ;
కోట్ << 'బాక్స్ 1 వెడల్పు మరియు పొడవు:' << బాక్స్1. getWidth ( ) << ',' << బాక్స్1. పొడవు ( ) << endl ;
కోట్ << 'బాక్స్ 2 వెడల్పు మరియు పొడవు:' << పెట్టె 2. getWidth ( ) << ',' << పెట్టె 2. పొడవు ( ) << endl ;
తిరిగి 0 ;
}
ఈ ప్రోగ్రామ్లో, వినియోగదారు రెండు చదరపు పెట్టెల పొడవు మరియు వెడల్పును ఇన్పుట్ చేసి, ఆపై రెండు పెట్టెలను సమం చేసి, వాటి పొడవు మరియు వెడల్పును తిరిగి ఇస్తారు:
కంపైలర్ లైన్#14లో లోపాన్ని అందిస్తుంది ఎందుకంటే కాంట్రాక్టర్ రెండు ఆర్గ్యుమెంట్లను ఆశించారు, అయితే దానికి ఎలాంటి ఆర్గ్యుమెంట్లు అందించబడలేదు:
లైన్#8లో కంపైలర్ కన్స్ట్రక్టర్లో లోపాన్ని అందిస్తుంది ఎందుకంటే ఆర్గ్యుమెంట్లు తప్పనిసరిగా అందించబడవు, అయితే నిర్వచించబడిన ఆర్గ్యుమెంట్లు ఉండాలి.
C++లో 'ఇనిషియలైజేషన్ కోసం సరిపోలే కన్స్ట్రక్టర్ లేదు' లోపాన్ని ఎలా పరిష్కరించాలి
స్క్వేర్ యొక్క డిఫాల్ట్ కన్స్ట్రక్టర్ ఇన్వోక్ చేయడానికి ప్రయత్నించినందున కంపైలర్ main.cpp కోడ్ లైన్#8లో లోపాన్ని ప్రదర్శిస్తుంది. కంపైలర్ డిఫాల్ట్ కన్స్ట్రక్టర్ను రూపొందించలేదు ఎందుకంటే ఇప్పటికే వినియోగదారు నిర్వచించిన కన్స్ట్రక్టర్ రెండు ఆర్గ్యుమెంట్లను తీసుకుంటుంది. కాబట్టి, దాని పారామితులను ఇలా పేర్కొనండి:
స్క్వేర్ బాక్స్ 2 ( 0 , 10 ) ;
కంపైలర్ వినియోగదారు నిర్వచించిన కన్స్ట్రక్టర్ను కలిగి లేనప్పుడు మాత్రమే డిఫాల్ట్ కన్స్ట్రక్టర్ను ఉత్పత్తి చేస్తుంది. కాబట్టి ఇక్కడ ఈ సందర్భంలో కన్స్ట్రక్టర్ నిర్వచించబడినప్పుడు, డిఫాల్ట్ కన్స్ట్రక్టర్ తప్పనిసరిగా వినియోగదారు అందించాలి. కాబట్టి, ఈ ప్రయోజనం కోసం, Square.h ఫైల్లోని రెండు-ఆర్గ్యుమెంట్ కన్స్ట్రక్టర్లో కూడా డిఫాల్ట్ ఆర్గ్యుమెంట్లను అందించండి. ఇది డేటాను ప్రారంభించకుండా వదిలివేయదు.
చతురస్రం :: చతురస్రం ( రెట్టింపు ఎల్ = 0 , రెట్టింపు లో = 0 )కన్స్ట్రక్టర్ మరియు దాని పారామితులను సరిగ్గా కాల్ చేయడం మరియు ప్రకటించడం ద్వారా కన్స్ట్రక్టర్ లోపం పరిష్కరించబడుతుంది. పైన ఇచ్చిన సూచనల ప్రకారం main.cpp మరియు Square.hలోని కోడ్లు మార్చబడతాయి. మరియు సరిపోలని కన్స్ట్రక్టర్ లోపం పరిష్కరించబడింది. ఇది హెడర్ ఫైల్ కోసం నవీకరించబడిన కోడ్:
ఇది ప్రధాన ఫైల్ కోసం నవీకరించబడిన కోడ్:
డీబగ్గింగ్ లోపాల తర్వాత పై కోడ్లు క్రింది అవుట్పుట్ను అందిస్తాయి:
రెండు చదరపు పెట్టెల వెడల్పు మరియు పొడవు వినియోగదారు అందించబడతాయి మరియు వాటి పారామితులు తిరిగి ఇవ్వబడతాయి. తర్వాత రెండు పెట్టెలను సమానంగా చేయడానికి షరతు వర్తించబడుతుంది, ఆపై వాటి కొత్త సంబంధిత పొడవు మరియు వెడల్పు విలువలు అందించబడతాయి.
ముగింపు
C++లో కన్స్ట్రక్టర్ అనేది ఒక నిర్దిష్ట సభ్యుని ఫంక్షన్, అది దానికి సంబంధించిన తరగతి పేరు తర్వాత దాని పేరును తీసుకుంటుంది. ఇది ఆబ్జెక్ట్ సభ్యులకు కొన్ని ఉపయోగకరమైన విలువలను ప్రారంభించడం కోసం ఉపయోగించబడుతుంది. కన్స్ట్రక్టర్ డిక్లరేషన్లో లోపం ఉన్నప్పుడు C++లో “నో మ్యాచింగ్ కన్స్ట్రక్టర్ ఆఫ్ ఇనిషియలైజేషన్” లోపాన్ని ఎదుర్కొంటుంది. సాధారణంగా, C++ కంపైలర్ స్వయంగా ఒక కన్స్ట్రక్టర్ను ఉత్పత్తి చేస్తుంది, అయితే కన్స్ట్రక్టర్లను వినియోగదారు డిక్లేర్ చేసినప్పుడు, అటువంటి లోపాలను ఎదుర్కోకుండా ఉండేందుకు కన్స్ట్రక్టర్ యొక్క పారామీటర్లు మరియు బాడీ యొక్క సరైన డిక్లరేషన్ ఉండాలి.