C++ ত্রুটি: কোনো কার্যকরী ওভারলোডেড নয় '=':

C Truti Kono Karyakari Obharalodeda Naya



ত্রুটিগুলি এমন অপারেশন যা কোনও কোডের অস্বাভাবিক কাজের ফলাফল হতে পারে। লেখার সময় ত্রুটি সনাক্ত করা যাবে না যতক্ষণ না আমরা কোডটি কার্যকর করি বা এটি কম্পাইল করা হয়। কিছু ত্রুটি কোডটিকে অপসারণ করা পর্যন্ত কার্যকর করা থেকে নিষিদ্ধ করে। আজ, আমরা একটি ত্রুটি নিয়েও আলোচনা করব যা প্রোগ্রামটি কম্পাইল করার সময়ও ঘটে, সেটি হল 'ত্রুটি: 'অপারেটর=' এর জন্য কোন মিল নেই'। এই ত্রুটির কারণ হতে পারে যেমন: যদি আমরা পয়েন্টারটি পাস করি যেখানে স্ট্রিং পাস করা হবে, ধ্রুবক পরিবর্তনশীল পরিবর্তন করা ইত্যাদি। 'কোনও কার্যকর ওভারলোডেড নয়' ত্রুটিটি সরানো কঠিন নয় তবে মূল কাজটি হল ত্রুটিটি বুঝুন কারণ এটি ত্রুটির কোনো বর্ণনা ছাড়াই ত্রুটি দেখায়।

বাক্য গঠন

এই ত্রুটির জন্য এমন কোন পূর্বনির্ধারিত সিনট্যাক্স নেই কারণ এটি কোড বা আউটপুটের একটি অংশ নয় এটি শুধুমাত্র একটি অস্পষ্টতা যা ভুল কোডের কারণে হতে পারে। আমরা দেখতে পাচ্ছি, ত্রুটিটি কেমন হতে পারে তার একটি উদাহরণ নীচে দেওয়া হল।







ত্রুটি : মিল নেই জন্য 'অপারেটর = '

উদাহরণ # 01:

আসুন আমরা এই ত্রুটি এবং এটি সমাধানের পদ্ধতি সম্পর্কে ধারণা করি। এটি আরও ভালভাবে বোঝার জন্য, আমরা একটি উদাহরণ করব যেখানে আমরা ফাংশনে অবজেক্ট ব্যবহার করে নামগুলি পাস করতে যাচ্ছি এবং এটি তাদের প্রদর্শন করবে। আমরা প্রথমে হেডার ফাইল iostream অন্তর্ভুক্ত করব। এর পরে, আমরা 'my_object' নামে একটি ক্লাস ঘোষণা করব। যার ভিতরে, আমরা 'F_name' এবং 'L_name' নামে দুটি স্ট্রিং ভেরিয়েবল ঘোষণা করেছি, 'F_name' যেটি ব্যক্তির প্রথম নাম নির্দেশ করে যেখানে 'L_name' ব্যক্তির শেষ নাম নির্দেশ করে।



এর পরে, আমরা 'my_object()' নামে একটি পাবলিক কনস্ট্রাক্টর ঘোষণা করেছি যেখানে আমরা 'F_name' এবং 'L_name' উভয় ভেরিয়েবলের জন্য নাল মান নির্ধারণ করেছি। এর পরে, আমরা আরেকটি ফাংশন ঘোষণা করেছি যেখানে আমরা স্ট্রিং টাইপ ভেরিয়েবল 'fn' এবং 'ln' পাস করেছি। এর ভিতরে, আমরা name_set() পদ্ধতিকে কল করি। তারপর, আমরা দুটি সদস্য ফাংশন 'শো()' এবং 'নাম_সেট()' ঘোষণা করেছি। যখন 'শো() ফাংশনটি কল করা হয়, এটি প্রথম নাম এবং শেষ নামগুলি একসাথে প্রদর্শন করবে। যেখানে, “set_name()” মেম্বার ফাংশনে, আমরা স্ট্রিং টাইপ “fn” এবং “ln” এর দুটি স্ট্রিং ভেরিয়েবল পাস করেছি যা আমরা দ্বিতীয় কনস্ট্রাক্টরকেও পাস করেছি।



এখন, my_object ক্লাসের কপি অ্যাসাইনমেন্ট অপারেটর ব্যবহার করে, আমরা 'my_object' টাইপের একটি প্যারামিটার নিই। কম্পাইলার সর্বদা এটিকে যেকোনো শ্রেণীর একটি ইনলাইন পাবলিক সদস্য হিসাবে ঘোষণা করে। এই সদস্যের অভ্যন্তরে, আমরা 'F_name' এর জন্য src.F_name এবং 'L_name' এর জন্য src.L_name বরাদ্দ করেছি যে আমরা 'F_name' এবং 'L_name' এর অনুলিপি ধরে রেখেছি। এটি আমার_অবজেক্ট ক্লাসের সদস্যদের কাছে পাস করা হয়েছে। এখন, আমরা 'name1' নামের ক্লাস my_cobject-এর একটি অবজেক্ট ঘোষণা করেছি যেখানে আমরা আর্গুমেন্ট হিসাবে দুটি স্ট্রিং 'Anna' এবং 'smith' পাস করেছি। এটি কনস্ট্রাক্টরকে কল করবে এবং শেষ নামের সাথে প্রথম নামটি প্রদর্শন করবে।





এর পরে, আমরা আরেকটি অবজেক্ট 'name2' তৈরি করেছি এবং তারপরে সেই বস্তুটির নাম আলাদাভাবে বরাদ্দ করেছি। উভয় অবজেক্টের জন্য কনস্ট্রাক্টরকে মান পাস করার পর, আমরা শো() মেথড বলেছিলাম যা তারপর 'nam1' এবং 'name2' উভয় অবজেক্টের নাম প্রদর্শন করবে। কোডের শেষে, আমরা নাল মান ফিরিয়ে দিয়েছি এবং আমাদের কোডটি কার্যকর করেছি।

অন্তর্ভুক্ত
ক্লাস আমার_অবজেক্ট {
ব্যক্তিগত :
std :: স্ট্রিং F_name, L_name ;
পাবলিক :
আমার_অবজেক্ট ( ) { F_নাম = '' ; L_নাম = '' ; }
আমার_অবজেক্ট ( std :: স্ট্রিং fn, std :: স্ট্রিং ln ) {
name_set ( fn, ln ) ;
}
অকার্যকর দেখান ( ) { std :: cout << 'নামটি হল ' << F_নাম << '' << L_নাম << ' \n ' ; }
অকার্যকর name_set ( std :: স্ট্রিং fn, std :: স্ট্রিং ln ) { F_নাম = fn ; L_নাম = ln ; }
আমার_অবজেক্ট এবং অপারেটর = ( const আমার_অবজেক্ট এবং src ) {
F_নাম = src F_নাম ;
L_নাম = src L_নাম ;
প্রত্যাবর্তন * এই ;
}

} ;
int প্রধান ( int argc, চর ** argv ) {
my_object name1 ( 'আন্না' , 'স্মিথ' ) ;
my_object name2 ;
নাম2 = ( 'আন্না' , 'স্মিথ' ) ;
নাম1 দেখান ( ) ;
নাম2 দেখান ( ) ;
প্রত্যাবর্তন 0 ;
}

আমাদের কোডটি কার্যকর করার পরে, আমাদের এই ত্রুটিটি দেখায় যা দেখায় যে আমরা 24 লাইনে ভুল কোড লিখেছি যা দেখায় যে ত্রুটির ধরণটি নির্দেশ করে 'ত্রুটি: 'অপারেটর=' এর জন্য কোন মিল নেই। এখন, আমরা এই ত্রুটিটি সমাধান করার চেষ্টা করব।



এই ত্রুটিটি সমাধান করার জন্য, আমাদের কাছে যে কোনও শ্রেণীর কনস্ট্রাক্টরের কাছে মানগুলি প্রেরণ করার একাধিক উপায় রয়েছে। প্রথম পদ্ধতিতে, আমরা কেবলমাত্র 'name1' অবজেক্টটিকে 'name2' এ বরাদ্দ করব কারণ আমরা উভয় অবজেক্টে একই মান পাস করেছি তাই আলাদাভাবে পাস করার দরকার নেই। এখন আমরা কোডটি কার্যকর করি।

int প্রধান ( int argc, চর ** argv ) {

my_object name1 ( 'আন্না' , 'স্মিথ' ) ;
my_object name2 ;
নাম2 = নাম1 ;
নাম1 দেখান ( ) ;
নাম2 দেখান ( ) ;

উপরে দেখানো কোডে পরিবর্তন করার পরে, আমরা নীচের স্নিপেটে দেওয়া ফলাফল পেয়েছি। আমরা কনস্ট্রাক্টরের কাছে পাস করা নামটি প্রদর্শন করেছি কোনো ত্রুটি ছাড়াই সফলভাবে প্রদর্শিত হয়।

এই ত্রুটিটি সমাধান করার দ্বিতীয় পদ্ধতি হল যখন আমাদের উভয় বস্তুর বিভিন্ন মান পাস করতে হবে। আর্গুমেন্ট হিসেবে কনস্ট্রাক্টরের কাছে পাস করা মানগুলির সাথে আমরা কেবল ক্লাসের নাম ব্যবহার করব। আমরা প্রথম নাম 'jhone' এবং দ্বিতীয় নাম 'স্মিথ' পাস. তারপরে, আমরা কোডটি কার্যকর করেছি।

int প্রধান ( int argc, চর ** argv ) {

my_object name1 ( 'আন্না' , 'স্মিথ' ) ;
my_object name2 ;
নাম2 = আমার_অবজেক্ট ( 'জন স্মিথ' ) ;

নাম1 দেখান ( ) ;
নাম2 দেখান ( ) ;

উপরের সংযোজিত কোডটি কার্যকর করার পরে, আমাদের কাছে নীচে দেখানো আউটপুট রয়েছে। বস্তু 'name1' এর জন্য, এটি 'Ana smith' নামটি প্রদর্শন করেছে এবং দ্বিতীয় বস্তু 'name2' এর জন্য এটি 'Jhone Smith' প্রদর্শন করেছে। কিন্তু এইবার আমাদের কোড কোন ত্রুটি ছাড়াই সঠিকভাবে কাজ করেছে।

এখন, আমরা আমাদের কোড সফলভাবে কার্যকর করার জন্য অন্য পদ্ধতি চেষ্টা করব। উপরের ক্ষেত্রে যেমন, আমরা অ্যাসাইনমেন্ট অপারেটর ব্যবহার করে বস্তুর মান নির্ধারণ করার চেষ্টা করেছি। কিন্তু এই সময়, আমরা বস্তুর ঘোষণার সময় মান পাস করব। আমরা নীচের স্নিপেটে দেখতে পাচ্ছি, একটি বস্তু “name1” ঘোষণা করার সময়, আমরা “name2”-এর জন্য একই ধাপের পুনরাবৃত্তিকারী বস্তুর কাছে যুক্তি হিসাবে মানগুলি পাস করেছি। এখন, আমরা আবার কোডটি কার্যকর করি।

int প্রধান ( int argc, চর ** argv ) {
my_object name1 ( 'আন্না' , 'স্মিথ' ) ;
my_object name2 ( 'জন স্মিথ' ) ;
নাম1 দেখান ( ) ;
নাম2 দেখান ( ) ;

এই সময়ের জন্যও কোডটি কার্যকর করার পরে, আমরা কোনও ত্রুটির সম্মুখীন হইনি যার অর্থ এটি আমাদের কোনও ত্রুটি হওয়া থেকেও বাধা দেবে।

উপসংহার

ক্লাস থেকে অ্যাক্সেস করা ফাংশনগুলিতে কাজ করার সময় আমরা যে ত্রুটির সম্মুখীন হতে পারি তা সংক্ষেপে আলোচনা করেছি। আমরা 'কোন কার্যকরী ওভারলোড নয়' ত্রুটিটি সমাধান করার কারণ এবং পদ্ধতিগুলিও অধ্যয়ন করেছি। বেশিরভাগ ক্ষেত্রে এই ত্রুটিটি নতুন প্রোগ্রামারদের জন্য বোঝা কঠিন তাই আমরা তাদের জন্য উদাহরণ প্রয়োগ করে এবং এর ব্যাখ্যা দিয়ে এটি থেকে পরিত্রাণ পেতে সহজ করার চেষ্টা করেছি।