C++ இல் 'இனிஷியலைசேஷனுக்கு மேட்சிங் கன்ஸ்ட்ரக்டர் இல்லை' பிழையை எவ்வாறு தீர்ப்பது

C Il Inisiyalaicesanukku Metcin Kanstraktar Illai Pilaiyai Evvaru Tirppatu



C++ இல் ஒரு கன்ஸ்ட்ரக்டர் என்பது ஒரு குறிப்பிட்ட உறுப்பினர் செயல்பாடு ஆகும், அது தொடர்புடைய வகுப்பின் பெயருக்குப் பிறகு அதன் பெயரை எடுக்கும். பொருளின் உறுப்பினர்களுக்கு சில பயனுள்ள மதிப்புகளை துவக்குவதற்கு இது பயன்படுத்தப்படுகிறது. கன்ஸ்ட்ரக்டர் பயனரால் வரையறுக்கப்படவில்லை எனில், C++ கம்பைலர் இயல்புநிலை கன்ஸ்ட்ரக்டரை உருவாக்குகிறது மற்றும் அளவுருக்கள் மற்றும் வெற்று உடலை எதிர்பார்க்கிறது. இருப்பினும், பயனர் வரையறுக்கப்பட்ட கட்டமைப்பாளர் இருக்கும்போது, ​​அதன் உடல் மற்றும் அளவுருக்களை அறிவிக்க வேண்டியது அவசியம்.

C++ இல் 'இனிஷியலைசேஷன் கன்ஸ்ட்ரக்டர் இல்லை' பிழை ஏற்பட என்ன காரணம்?

C++ இல் உள்ள கன்ஸ்ட்ரக்டர்களைக் கையாளும் போது, ​​“இனிஷியலைசேஷன் ஃபார் மேட்சிங் கன்ஸ்ட்ரக்டர் இல்லை” என்ற பிழையை எதிர்கொள்ள நேரிடும், ஏனெனில், ஒரு கன்ஸ்ட்ரக்டரை இயல்புநிலை கன்ஸ்ட்ரக்டர் என்று அழைக்கும்போது, ​​கம்பைலர் உருவாக்கப்படாமல் இருப்பதால், கன்ஸ்ட்ரக்டரின் அளவுருக்கள் மற்றும் உடலை நீங்களே அறிவிக்க வேண்டும். சரியான அளவுருக்களை அறிவிக்கத் தவறினால், இந்த வகையான கன்ஸ்ட்ரக்டர் பிழை ஏற்படுகிறது.







ஒரு எளிய உரை கோப்பை உருவாக்கி, அதில் Square() செயல்பாட்டின் குறியீட்டை ஒட்டவும், அதை .h நீட்டிப்புடன் சேமிக்கவும். இப்போது இந்தக் கோப்பை CPP கம்பைலரின் பின் கோப்புறையின் உள்ளடக்கிய கோப்புறையில் ஒட்டவும். இப்போது, ​​இந்த ஹெடர் பைலை main.cppல் அழைத்தால், இந்தக் கோப்பு கம்பைலரால் படிக்கப்படும்.



Square.h தலைப்பு கோப்பு

#ifndef SQUARE_H

# SQUARE_H ஐ வரையறுக்கவும்


வர்க்கம் சதுரம் {

தனிப்பட்ட :

இரட்டை நீளம் ;

இரட்டை அகலம் ;

பொது :

சதுரம் ( இரட்டை , இரட்டை ) ;

இரட்டை நீளம் ( ) நிலையான ;

இரட்டை அகலம் ( ) நிலையான ;

} ;



சதுரம் :: சதுரம் ( இரட்டை l, இரட்டை இல் ) {

நீளம் = எல் ;
அகலம் = இல் ;

}



இரட்டை சதுரம் :: அகலம் ( ) நிலையான { திரும்ப அகலம் ; }

இரட்டை சதுரம் :: நீளம் ( ) நிலையான { திரும்ப நீளம் ; }



#endif

main.cpp தலைப்பு கோப்பு

# அடங்கும்

# 'square.h' அடங்கும்

பயன்படுத்தி பெயர்வெளி வகுப்பு ;



முழு எண்ணாக முக்கிய ( )

{

சதுர பெட்டி 1 ( 10.0 , 10.0 ) ;

சதுர பெட்டி 2 ;



கூட் << 'பெட்டி 1ன் அகலம் மற்றும் நீளம்:' << பெட்டி1. அகலம் ( ) << ',' << பெட்டி1. நீளம் ( ) << endl ;

கூட் << 'பெட்டி 2ன் அகலம் மற்றும் நீளம்:' << பெட்டி2. அகலம் ( ) << ',' << பெட்டி2. நீளம் ( ) << endl ;



பெட்டி2 = பெட்டி1 ;

கூட் << 'சதுரப் பெட்டி 1 சதுரப் பெட்டி 2க்கு சமமாக இருக்கும்போது' << endl ;

கூட் << '1 பெட்டியின் அகலம் மற்றும் நீளம்:' << பெட்டி1. அகலம் ( ) << ',' << பெட்டி1. நீளம் ( ) << endl ;

கூட் << 'பெட்டி 2ன் அகலம் மற்றும் நீளம்:' << பெட்டி2. அகலம் ( ) << ',' << பெட்டி2. நீளம் ( ) << endl ;



திரும்ப 0 ;

}

இந்தத் திட்டத்தில், பயனர் இரண்டு சதுரப் பெட்டிகளின் நீளம் மற்றும் அகலத்தை உள்ளீடு செய்து, இரண்டு பெட்டிகளையும் சமன் செய்து, அவற்றின் நீளம் மற்றும் அகலத்தை வழங்குகிறார்:




கம்பைலர் பிழையை வரி#14 இல் தருகிறார், ஏனெனில் ஒப்பந்தக்காரர் இரண்டு வாதங்களை எதிர்பார்க்கிறார், ஆனால் அதற்கு எந்த வாதங்களும் வழங்கப்படவில்லை:





வரி # 8 இல் கம்பைலர் கன்ஸ்ட்ரக்டரில் ஒரு பிழையை வழங்குகிறது, ஏனெனில் வரையறுக்கப்பட்ட வாதங்கள் இருக்க வேண்டும் போது வாதங்கள் வழங்கப்படவில்லை.

C++ இல் 'இனிஷியலைசேஷனுக்கு மேட்சிங் கன்ஸ்ட்ரக்டர் இல்லை' பிழையை எவ்வாறு தீர்ப்பது

ஸ்கொயரின் இயல்புநிலை கட்டமைப்பாளர் செயல்படுத்த முயற்சித்ததால், கம்பைலர், main.cpp குறியீட்டின் வரி#8 இல் பிழையைக் காட்டுகிறது. கம்பைலரால் இயல்புநிலை கன்ஸ்ட்ரக்டரை உருவாக்க முடியாது, ஏனெனில் ஏற்கனவே பயனர் வரையறுக்கப்பட்ட கன்ஸ்ட்ரக்டர் இரண்டு வாதங்களை எடுக்கும். எனவே, அதன் அளவுருக்களை பின்வருமாறு குறிப்பிடவும்:



சதுர பெட்டி 2 ( 0 , 10 ) ;

ஒரு கம்பைலர், பயனரால் வரையறுக்கப்பட்ட கன்ஸ்ட்ரக்டரைக் கொண்டிருக்கவில்லை என்றால் மட்டுமே இயல்புநிலை கட்டமைப்பாளரை உருவாக்குகிறது. எனவே இங்கே ஒரு கன்ஸ்ட்ரக்டர் வரையறுக்கப்பட்டிருக்கும் போது, ​​இயல்புநிலை கட்டமைப்பாளர் பயனரால் வழங்கப்பட வேண்டும். எனவே, இந்த நோக்கத்திற்காக, Square.h கோப்பிலும் இரண்டு-வாதக் கட்டமைப்பாளரில் இயல்புநிலை வாதங்களை வழங்கவும். இது தரவை ஆரம்பிக்காமல் விடாது.

சதுரம் :: சதுரம் ( இரட்டை எல் = 0 , இரட்டை இல் = 0 )

கன்ஸ்ட்ரக்டர் மற்றும் அதன் அளவுருக்களை சரியாக அழைத்து அறிவிப்பதன் மூலம் கன்ஸ்ட்ரக்டர் பிழையை சரிசெய்ய முடியும். main.cpp மற்றும் Square.h இல் உள்ள குறியீடுகள் மேலே கொடுக்கப்பட்ட வழிமுறைகளின்படி மாற்றப்படுகின்றன. மற்றும் பொருந்தாத கட்டமைப்பாளர் பிழை தீர்க்கப்பட்டது. இது தலைப்புக் கோப்பிற்கான புதுப்பிக்கப்பட்ட குறியீடு:

இது பிரதான கோப்பிற்கான புதுப்பிக்கப்பட்ட குறியீடு:

பிழைத்திருத்தப் பிழைகளுக்குப் பிறகு மேலே உள்ள குறியீடுகள் பின்வரும் வெளியீட்டை வழங்கும்:

இரண்டு சதுர பெட்டிகளின் அகலம் மற்றும் நீளம் பயனரால் வழங்கப்படுகிறது, மேலும் அவற்றின் அளவுருக்கள் திரும்பப் பெறப்படும். பின்னர் இரண்டு பெட்டிகளையும் சமமாக மாற்ற ஒரு நிபந்தனை பயன்படுத்தப்படுகிறது, பின்னர் அவற்றின் புதிய தொடர்புடைய நீளம் மற்றும் அகல மதிப்புகள் வழங்கப்படும்.

முடிவுரை

C++ இல் ஒரு கன்ஸ்ட்ரக்டர் என்பது ஒரு குறிப்பிட்ட உறுப்பினர் செயல்பாடு ஆகும், அது தொடர்புடைய வகுப்பின் பெயருக்குப் பிறகு அதன் பெயரை எடுக்கும். பொருளின் உறுப்பினர்களுக்கு சில பயனுள்ள மதிப்புகளை துவக்குவதற்கு இது பயன்படுத்தப்படுகிறது. கன்ஸ்ட்ரக்டரின் அறிவிப்பில் பிழை ஏற்பட்டால், C++ இல் 'இனிஷியலைசேஷன் கன்ஸ்ட்ரக்டர் இல்லை' என்ற பிழையை எதிர்கொள்கிறது. வழக்கமாக, C++ கம்பைலர் ஒரு கன்ஸ்ட்ரக்டரை உருவாக்குகிறது, ஆனால் கன்ஸ்ட்ரக்டர்கள் பயனரால் அறிவிக்கப்படும் போது, ​​அத்தகைய பிழைகளை எதிர்கொள்வதைத் தவிர்க்க, அளவுருக்கள் மற்றும் கட்டமைப்பாளரின் உடல் பற்றிய சரியான அறிவிப்பு இருக்க வேண்டும்.