কিভাবে C++ এ 'ইনিশিয়ালাইজেশনের জন্য কোন ম্যাচিং কনস্ট্রাক্টর নেই' এরর সমাধান করবেন

Kibhabe C E Inisiyala Ijesanera Jan Ya Kona Myacim Kanastraktara Ne I Erara Samadhana Karabena



C++-এ কনস্ট্রাক্টর হল একটি নির্দিষ্ট সদস্য ফাংশন যা এটির সাথে সম্পর্কিত ক্লাসের নামের পরে নাম নেয়। এটি বস্তুর সদস্যদের জন্য কিছু দরকারী মান শুরু করার জন্য ব্যবহৃত হয়। কনস্ট্রাক্টর ব্যবহারকারী দ্বারা সংজ্ঞায়িত না হলে, C++ কম্পাইলার একটি ডিফল্ট কনস্ট্রাক্টর তৈরি করে এবং কোন প্যারামিটার এবং একটি খালি বডি আশা করে না। যাইহোক, যখন একটি ব্যবহারকারী-সংজ্ঞায়িত কনস্ট্রাক্টর থাকে, তখন এটির বডি এবং প্যারামিটারগুলি ঘোষণা করা প্রয়োজন।

C++-এ 'ইনিশিয়ালাইজেশনের জন্য কোন ম্যাচিং কনস্ট্রাক্টর' ত্রুটির কারণ কী?

C++ এ কনস্ট্রাক্টরদের সাথে ডিল করার সময় 'ইনিশিয়ালাইজেশনের জন্য কোন ম্যাচিং কনস্ট্রাক্টর' ত্রুটির সম্মুখীন হয় এটি সাধারণত কারণ যখন একটি কনস্ট্রাক্টরকে কম্পাইলার দ্বারা ডিফল্ট কনস্ট্রাক্টর বলা হয় তখন তৈরি করা হয় না, তাই আপনাকে নিজেই কনস্ট্রাক্টরের প্যারামিটার এবং বডি ঘোষণা করতে হবে। সঠিক পরামিতি ঘোষণা করতে ব্যর্থ হলে এই ধরনের কনস্ট্রাক্টর ত্রুটি দেখা দেয়।







একটি সাধারণ টেক্সট ফাইল তৈরি করুন, এতে Square() ফাংশনের কোড পেস্ট করুন এবং .h এক্সটেনশন দিয়ে সংরক্ষণ করুন। এখন এই ফাইলটি CPP কম্পাইলারের বিন ফোল্ডারের অন্তর্ভুক্ত ফোল্ডারে পেস্ট করুন। এখন, এই হেডার ফাইলটিকে main.cpp-এ কল করলে, এই ফাইলটি কম্পাইলার পড়বে।



Square.h হেডার ফাইল

#ifndef SQUARE_H

#SQUARE_H সংজ্ঞায়িত করুন


ক্লাস বর্গক্ষেত্র {

ব্যক্তিগত :

দ্বিগুণ দৈর্ঘ্য ;

দ্বিগুণ প্রস্থ ;

পাবলিক :

বর্গক্ষেত্র ( দ্বিগুণ , দ্বিগুণ ) ;

দ্বিগুণ দৈর্ঘ্য পেতে ( ) const ;

দ্বিগুণ getWidth ( ) const ;

} ;



বর্গক্ষেত্র :: বর্গক্ষেত্র ( দ্বিগুণ আমি দ্বিগুণ ভিতরে ) {

দৈর্ঘ্য = l ;
প্রস্থ = ভিতরে ;

}



দ্বিগুণ বর্গক্ষেত্র :: getWidth ( ) const { ফিরে প্রস্থ ; }

দ্বিগুণ বর্গক্ষেত্র :: দৈর্ঘ্য পেতে ( ) const { ফিরে দৈর্ঘ্য ; }



#যদি শেষ

main.cpp হেডার ফাইল

# অন্তর্ভুক্ত করুন

# 'square.h' অন্তর্ভুক্ত করুন

ব্যবহার নামস্থান std ;



int প্রধান ( )

{

বর্গাকার বক্স 1 ( 10.0 , 10.0 ) ;

বর্গাকার বক্স2 ;



cout << 'বক্স 1 এর প্রস্থ এবং দৈর্ঘ্য:' << box1. getWidth ( ) << ', ' << box1. দৈর্ঘ্য পেতে ( ) << endl ;

cout << 'বক্স 2 এর প্রস্থ এবং দৈর্ঘ্য:' << বক্স২। getWidth ( ) << ', ' << বক্স২। দৈর্ঘ্য পেতে ( ) << endl ;



বক্স২ = box1 ;

cout << 'যখন স্কয়ার বক্স 1 স্কয়ার বক্স 2 এর সমান' << endl ;

cout << 'বক্স 1 এর প্রস্থ এবং দৈর্ঘ্য:' << box1. getWidth ( ) << ', ' << box1. দৈর্ঘ্য পেতে ( ) << endl ;

cout << 'বক্স 2 এর প্রস্থ এবং দৈর্ঘ্য:' << বক্স২। getWidth ( ) << ', ' << বক্স২। দৈর্ঘ্য পেতে ( ) << endl ;



ফিরে 0 ;

}

এই প্রোগ্রামে, ব্যবহারকারী দুটি বর্গাকার বাক্সের দৈর্ঘ্য এবং প্রস্থ ইনপুট করে এবং তারপরে দুটি বাক্সের সমান করে এবং তাদের দৈর্ঘ্য এবং প্রস্থ ফেরত দেয়:




কম্পাইলার লাইন # 14 এ ত্রুটি ফেরত দেয় কারণ ঠিকাদার দুটি আর্গুমেন্ট আশা করে যখন এটিতে কোন আর্গুমেন্ট দেওয়া নেই:





লাইন#8-এ কম্পাইলার কনস্ট্রাক্টরে একটি ত্রুটি ফেরত দেয় কারণ আর্গুমেন্ট দেওয়া হয় না যখন সংজ্ঞায়িত আর্গুমেন্ট থাকতে হবে।

কিভাবে C++ এ 'ইনিশিয়ালাইজেশনের জন্য কোন ম্যাচিং কনস্ট্রাক্টর নেই' এরর সমাধান করবেন

কম্পাইলার main.cpp কোডের লাইন#8-এ ত্রুটি প্রদর্শন করে কারণ স্কয়ারের ডিফল্ট কনস্ট্রাক্টরকে ইনভোক করার চেষ্টা করা হয়েছে। কম্পাইলার একটি ডিফল্ট কনস্ট্রাক্টর তৈরি করতে পারে না কারণ ইতিমধ্যে একটি ব্যবহারকারী-সংজ্ঞায়িত কনস্ট্রাক্টর রয়েছে যা দুটি আর্গুমেন্ট নেয়। অতএব, এর পরামিতিগুলি উল্লেখ করুন:



বর্গাকার বক্স2 ( 0 , 10 ) ;

একটি কম্পাইলার শুধুমাত্র তখনই একটি ডিফল্ট কনস্ট্রাক্টর তৈরি করে যখন এতে কোনো ব্যবহারকারী-সংজ্ঞায়িত কনস্ট্রাক্টর না থাকে। সুতরাং এখানে এই ক্ষেত্রে যখন একটি কনস্ট্রাক্টর সংজ্ঞায়িত করা হয়, ডিফল্ট কনস্ট্রাক্টর অবশ্যই ব্যবহারকারী দ্বারা প্রদান করা উচিত। সুতরাং, এই উদ্দেশ্যে, Square.h ফাইলে দুই-আর্গুমেন্ট কনস্ট্রাক্টরে ডিফল্ট আর্গুমেন্ট প্রদান করুন। এটি ডেটাকে শুরু না করে দেয় না।

বর্গক্ষেত্র :: বর্গক্ষেত্র ( দ্বিগুণ l = 0 , দ্বিগুণ ভিতরে = 0 )

কনস্ট্রাক্টর এবং এর প্যারামিটারগুলিকে সঠিকভাবে কল করে এবং ঘোষণা করে কনস্ট্রাক্টরের ত্রুটি ঠিক করা যেতে পারে। main.cpp এবং Square.h-এর কোডগুলি উপরে প্রদত্ত নির্দেশাবলী অনুসারে পরিবর্তিত হয়েছে। এবং কোন মিল না কনস্ট্রাক্টর ত্রুটি সমাধান করা হয়. এটি হেডার ফাইলের জন্য আপডেট করা কোড:

এটি প্রধান ফাইলের জন্য আপডেট করা কোড:

ডিবাগিং ত্রুটির পরে উপরের কোডগুলি নিম্নলিখিত আউটপুট প্রদান করে:

দুটি বর্গাকার বাক্সের প্রস্থ এবং দৈর্ঘ্য ব্যবহারকারী দ্বারা সরবরাহ করা হয় এবং তাদের পরামিতিগুলি ফেরত দেওয়া হয়। পরবর্তীতে উভয় বাক্সকে সমান করার জন্য একটি শর্ত প্রয়োগ করা হয়, এবং তারপর তাদের নতুন সংশ্লিষ্ট দৈর্ঘ্য এবং প্রস্থের মানগুলি ফেরত দেওয়া হবে।

উপসংহার

C++-এ কনস্ট্রাক্টর হল একটি নির্দিষ্ট সদস্য ফাংশন যা এটির সাথে সম্পর্কিত ক্লাসের নামের পরে নাম নেয়। এটি বস্তুর সদস্যদের জন্য কিছু দরকারী মান শুরু করার জন্য ব্যবহৃত হয়। কন্সট্রাক্টরের ঘোষণায় ত্রুটি থাকলে C++-এ 'নো ম্যাচিং কনস্ট্রাক্টর ফর ইনিশিয়ালাইজেশন' এরর সম্মুখীন হয়। সাধারণত, C++ কম্পাইলার নিজেই একটি কনস্ট্রাক্টর তৈরি করে, কিন্তু যখন ব্যবহারকারী দ্বারা কনস্ট্রাক্টর ঘোষণা করা হয় তখন এই ধরনের ত্রুটির সম্মুখীন হওয়া এড়াতে কনস্ট্রাক্টরের প্যারামিটার এবং বডির যথাযথ ঘোষণা থাকতে হবে।