C++ এ 'কাউট ইজ দ্ব্যর্থক' ত্রুটি

C E Ka Uta Ija Dbyarthaka Truti



এই নিবন্ধটি C++ প্রোগ্রামিং ভাষায় অস্পষ্ট ত্রুটির বিষয়ে উদ্বিগ্ন। অস্পষ্ট পরিস্থিতি দেখা দেয় যখন কম্পাইলার বিভিন্ন কাজে ব্যবহার করা পদ্ধতি বা অপারেটর নির্ধারণ করতে পারে না। কখনও কখনও, আমরা একই নামস্থানের সাথে একই প্যারামিটার ফাংশন ব্যবহার করি এবং তারপর উভয় ক্ষেত্রেই cout সংজ্ঞায়িত করা হয়। যখন আমরা প্রোগ্রামটি এক্সিকিউট করি, তখন কম্পাইলার cout অস্পষ্ট ত্রুটি তৈরি করে কারণ কম্পাইলার বুঝতে পারে না যে এই কোডটি কোন অর্থ দেখায়। সংজ্ঞায়িত নেমস্পেস বা প্রোগ্রামের ভিতরে ফাংশনগুলির একাধিক ঘোষণার মধ্যে একটি দ্বন্দ্ব উপস্থিত হলে cout অস্পষ্টতা দেখা দেয়।

উদাহরণ 1:

এটি একটি cout অস্পষ্ট ত্রুটির একটি উদাহরণ যা বেশিরভাগ C++ প্রোগ্রামিংয়ে ঘটে। এখানে, আমরা দেখব যে আমরা একাধিক নামস্থান ব্যবহার করার সময় কম্পাইলার কীভাবে অস্পষ্ট ত্রুটিগুলি তৈরি করে। এই উদাহরণের কোড স্নিপেট নিম্নলিখিত উল্লেখ করা হয়েছে:







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

নামস্থান ল্যাপটপ {

অকার্যকর প্রদর্শন ( ) {

std :: cout << 'এটি ল্যাপটপ নেমস্পেস' << std :: endl ;

}

}

নামস্থান মুঠোফোন {

অকার্যকর প্রদর্শন ( ) {


std :: cout << 'এটি মোবাইল নেমস্পেস' << std :: endl ;

}

}

int প্রধান ( ) {

ব্যবহার নামস্থান ল্যাপটপ ;
ব্যবহার নামস্থান মুঠোফোন ;

প্রদর্শন ( ) ;

ফিরে 0 ;


}

এখানে, আমরা দুটি নামস্থান সহ একটি প্রোগ্রাম নিয়েছি যা আমাদের প্রয়োজন অনুসারে সংজ্ঞায়িত করা হয়েছে। আমরা পর্দায় স্ট্রিং প্রদর্শন করতে চাই. এই কোডের আউটপুট নিম্নলিখিত সংযুক্ত করা হয়েছে:





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





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

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

নামস্থান ল্যাপটপ {

অকার্যকর প্রদর্শন ( ) {


std :: cout << 'এটি ল্যাপটপ নেমস্পেস' << std :: endl ;

}

}

নামস্থান মুঠোফোন {

অকার্যকর প্রদর্শন ( ) {

std :: cout << 'এটি মোবাইল নেমস্পেস' << std :: endl ;

}

}

int প্রধান ( ) {

ব্যবহার নামস্থান ল্যাপটপ ;
ব্যবহার নামস্থান মুঠোফোন ;
ল্যাপটপ :: প্রদর্শন ( ) ;
ফিরে 0 ;


}

এখানে, আমরা পূর্ববর্তী স্ক্রিনশটে দেখা যেভাবে প্রধান ফাংশনে “ল্যাপটপ” নামস্থানের সাথে প্রদর্শন() পদ্ধতিটি লিঙ্ক করতে পারি। এখন, প্রোগ্রাম চালান। আউটপুট কনসোল উইন্ডোতে প্রদর্শিত হয়।



উদাহরণ 2:

এই দৃশ্যটি C++-এর অস্পষ্ট ত্রুটির সাথে সম্পর্কিত। কম্পাইলার একটি ত্রুটি দেখায় যখন এটি এক্সিকিউশন ফ্লো বুঝতে পারে না। এই উদাহরণের কোড স্নিপেট নিম্নলিখিত সংযুক্ত করা হয়েছে:

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

নামস্থান ভাষা {

অকার্যকর ছাপা ( int i ) {

std :: cout << 'সি ভাষার নামস্থান:' << i << std :: endl ;

}

}

নামস্থান জাভা {

অকার্যকর ছাপা ( int j ) {

std :: cout << 'জাভা ভাষার নামস্থান:' << j << std :: endl ;

}

}

ব্যবহার নামস্থান ভাষা ;

ব্যবহার নামস্থান জাভা ;

int প্রধান ( ) {

ছাপা ( 5 ) ;
ফিরে 0 ;


}

এই কোডে, আমরা সমস্ত প্রয়োজনীয় লাইব্রেরি হেডার সংজ্ঞায়িত করি। আমরা বিভিন্ন উদ্দেশ্যে দুটি নামস্থান তৈরি করি। 'Clanguage' নামস্থানে, আমরা একটি 'প্রিন্ট' পদ্ধতি সংজ্ঞায়িত করি যা ব্যবহারকারীর কাছ থেকে পূর্ণসংখ্যার মান নেয়। 'প্রিন্ট' ফাংশনে, আমরা কনসোল স্ক্রিনে ব্যবহারকারীর পাস করা মানটি দেখাতে চাই। আমরা আমাদের কোডে 'cout' স্ট্রীম ব্যবহার করে প্রয়োজনীয় আউটপুট প্রদর্শন করি। এর পরে, আমরা আরেকটি নামস্থান সংজ্ঞায়িত করি যার নাম 'জাভা'।

এই 'জাভা' নামস্থানে, ব্যবহারকারী 'cout' ব্যবহার করে যে মানটি পাস করেন তা প্রদর্শন করতে আমরা আবার 'প্রিন্ট' পদ্ধতি ব্যবহার করি। C++ এ কনসোল উইন্ডোতে কাঙ্খিত আউটপুট পেতে আমরা আমাদের প্রধান ফাংশনে ব্যবহারের জন্য উভয় নামস্থানকে কল করি। 'প্রধান' ফাংশনে, কনসোল স্ক্রিনে পাস করা মান দেখানোর জন্য আমরা 'প্রিন্ট()' ওভারলোডেড ফাংশনকে কল করি।

প্রধান মেনু থেকে 'এক্সিকিউট' বিকল্পে ক্লিক করুন এবং 'কম্পাইল এবং রান' বিকল্পটি নির্বাচন করুন। এই কোড এক্সিকিউশনে অস্পষ্টতা সম্পর্কে ত্রুটি ঘটে। ত্রুটির স্ক্রিনশটটি নিম্নরূপ সংযুক্ত করা হয়েছে:

এই ত্রুটিটি নির্দেশ করে যে কম্পাইলার ওভারলোডেড প্রিন্ট() ফাংশন সম্পর্কে বিভ্রান্ত হয় যা বলা হয়। এই ত্রুটি লাইন 19,  “মুদ্রণ (5)”. কম্পাইলার এই ওভারলোডেড ফাংশনটির অন্তর্গত নামস্থান সম্পর্কে বিভ্রান্ত। নতুনরা বেশিরভাগ সময় এই ধরনের ত্রুটিতে আটকে থাকে।

আসুন এই ত্রুটিটি সমাধান করি যা বাস্তবে জটিল নয়। অস্পষ্ট ত্রুটিগুলি সহজেই সমাধান করা হয়। কম্পাইলার দৃশ্যমানতা এবং বোঝার জন্য আমাদের অবশ্যই 'প্রধান' ফাংশনে ওভারলোড ফাংশনের সাথে নেমস্পেস নির্দিষ্ট করতে হবে। এই প্রোগ্রামের মতো, আমরা আমাদের বিদ্যমান কোডে এই 'java::print(5)' যোগ করি যা নিম্নলিখিতটিতে উল্লিখিত হয়েছে:

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

নামস্থান ভাষা {

অকার্যকর ছাপা ( int i ) {

std :: cout << 'সি ভাষার নামস্থান:' << i << std :: endl ;

}

}

নামস্থান জাভা {

অকার্যকর ছাপা ( int j ) {

std :: cout << 'জাভা ভাষার নামস্থান:' << j << std :: endl ;

}

}

ব্যবহার নামস্থান ভাষা ;

ব্যবহার নামস্থান জাভা ;

int প্রধান ( ) {

জাভা :: ছাপা ( 5 ) ;
ফিরে 0 ;


}

এখন, প্রোগ্রামটি কোন প্রকার অস্পষ্ট ত্রুটি ছাড়াই পুরোপুরি কার্যকর করা হয় এবং কনসোল স্ক্রিনে আউটপুট প্রদর্শন করে। এই প্রোগ্রামের আউটপুট নিম্নলিখিত সংযুক্ত করা হয়:

উদাহরণ 3:

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

এখানে, আমরা প্রয়োজনীয় লাইব্রেরি সংজ্ঞায়িত করি। এর পরে, আমরা একটি নেমস্পেস সংজ্ঞায়িত করি যাতে ক্লাসটি রয়েছে যেখানে আমরা কনসোল উইন্ডোতে স্ট্রিংটি প্রদর্শন করতে চাই। আমরা 'c' ভেরিয়েবল সহ 'প্রধান' ফাংশনে এই সংজ্ঞায়িত নামস্থানটিকে বলি। এর পরে, আমরা একটি নেমস্পেস অবজেক্ট ব্যবহার করে print() পদ্ধতিকে কল করি। মেথড কলের পর আমরা আবার কনসোল স্ক্রিনে স্ট্রিংটি প্রদর্শন করি। আউটপুট উভয় স্ট্রিং হতে হবে এবং কনসোল পর্দায় প্রদর্শিত হবে. যখন আমরা এই কোডটি এক্সিকিউট করি, তখন নিচের মত করে ত্রুটি দেখা দেয়:

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

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

নামস্থান myNamespace {

ক্লাস cout {
সর্বজনীন :
অকার্যকর ছাপা ( ) {


cout << 'কাস্টম কাউট' << std :: endl ;

}

} ;

}

int প্রধান ( ) {

myNamespace :: cout ;
গ. ছাপা ( ) ;


cout << 'ওহে বিশ্ব!' << std :: endl ;

ফিরে 0 ;

}

কম্পাইলার কউট স্টেটমেন্ট বাছাই করেনি যা কনসোল স্ক্রিনে ডেটা প্রদর্শন করে। কম্পাইলার নেমস্পেস বুঝতে পারে না যা cout স্টেটমেন্টের অন্তর্গত এবং একটি ত্রুটি তৈরি করে। এই ত্রুটির সমাধান হল কম্পাইলার পঠনযোগ্যতা এবং বোঝার জন্য একটি cout স্টেটমেন্ট সহ একটি নেমস্পেস অবজেক্ট যোগ করা। cout স্টেটমেন্টের সাথে 'std::' যোগ করুন এবং কোডটি চালান। নিম্নলিখিত আউটপুট কনসোল পর্দায় প্রদর্শিত হয়:

উপসংহার

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