"No matching function for call" মানে যখন আমরা কিছু নির্দিষ্ট ফাংশন কল করি, কিন্তু সেই ফাংশনের আইডি ওই ফাংশনের আর্গুমেন্টের সাথে মেলে না যা ডিফাইন করা আছে। তাই আমরা C++-এ 'no matching function for a call' এরর পাই। কম্পাইলার যখন বলে যে কোনো ম্যাচিং মেথড নেই, এটি সাধারণত ইঙ্গিত করে যে কম্পাইলার আমাদের দেওয়া প্যারামিটারهای মতো একই নামের একটি মেথড শনাক্ত করেছে।
তাই যখন আমরা নির্দিষ্ট মেথডের ভুল টাইপ বা ভুল সেট অফ প্যারামিটার ফাংশনে পাস করি। একটি ফাংশন ডেফিনিশন কম্পাইলারকে মেথডের নাম এবং কিভাবে আহ্বান করতে হয় সেটি বলে দেয়। ফাংশনের সম্পূর্ণ কন্টেন্ট স্পষ্টভাবে ডিক্লেয়ার করা থাকে। এই নিবন্ধে, আমরা আলোচনা করব C++-এ 'No matching function for a call' এরর কীভাবে দেখায়।
ক্লাসের অবজেক্ট ব্যবহার করুন
এই পরিস্থিতিতে, ফাংশন প্যারামিটার কল করার время মেলে না, তাই আমরা পয়েন্টার পাস করার চেষ্টা করব যেখানে রেফারেন্স দরকার এবং ফাংশন কলিতে ভিন্ন ক্লাস রেফারেন্স টাইপ ব্যবহার করব। যখনই আমরা ফাংশন আহ্বান করি কিন্তু ফাংশন ডেফিনিশনের আর্গুমেন্ট ম্যাচ না করে, তবে 'No matching function for call to C++' এরর উত্থাপিত হয়।
এখন এই এরর ফিক্স করতে হলে; এই উদ্দেশ্যে, আমরা শুধু ফাংশন ডেফিনিশনের সময় উপযুক্ত ম্যাচিং প্যারামিটার প্রদান করব। কোডটি এর বিস্তারিত বিবরণের সাথে নিচে দেখা যাচ্ছে।

কোডের শুরুতে, আমরা লাইব্রেরি
পরবর্তী লাইনে, আমরা অন্য একটি ফাংশন setValue() আহ্বান করব। এই মেথডটি আর্গুমেন্ট হিসেবে 'value' ভেরিয়েবল ধারণ করে। আমরা আর্গুমেন্ট হিসেবে পাস করা value-এ ইনক্রিমেন্ট করব। তারপর main() ফাংশন কল করব, এবং আমাদের 'argc' ইন্টিজার ডেটা টাইপ এবং 'argv' ক্যারেক্টার ডেটা টাইপের পয়েন্টার আর্গুমেন্ট হিসেবে দেওয়া আছে। 'argc' হলো অপারেটিং সিস্টেম থেকে কোডে প্রদত্ত প্যারামিটার সংখ্যা। 'argv' হলো প্যারামিটার সংগ্রহ।
এখন আমরা ক্লাস 'A'-র একটি অবজেক্ট 'obj' তৈরি করব। আমরা setValue() মেথড আহ্বান করব। এর আর্গুমেন্ট হিসেবে 'obj' পাস করব। কিন্তু আমরা অবজেক্টটিকে ক্লাসের সাথে সংযুক্ত করিনি। তাই যখন আমরা setValue() ফাংশন কল করি, এটি একটি এরর রিটার্ন করে কারণ সেটি সেটি ক্লাস নেই যেখানে আমরা setValue() ফাংশন আহ্বান করছি। উপরের কোডে, আমরা setValue() ফাংশন কলিং আর্গুমেন্টে একটি ক্লাস অবজেক্ট পাস করছি, কিন্তু যদি setValue() ফাংশন ডেফিনিশনে চেক করি, তবে আমরা পাসিং আর্গুমেন্ট value কে ইন্টিজার হিসেবে ধরে নিচ্ছি। কোড টার্মিনেট করতে আমরা 'return 0' কমান্ড ব্যবহার করেছি। উপরের কোডের আউটপুট নিচে যাচাই করা যাবে।

উপরের কোড এক্সিকিউট করার পর আমরা 'no matching function for call to A' এরর পাই।
এই এরর কীভাবে সমাধান করবেন?
মেথড কল করার সময় এই এরর ফিক্স করতে, আমাদের ফাংশনে পর্যাপ্ত সংশ্লিষ্ট প্যারামিটার দিতে হবে। এই এরর সমাধান করার আরেকটি উপায় হচ্ছে ভিন্ন প্যারামিটার সহ বিভিন্ন ওভারলোডেড ফাংশন তৈরি করা। এখানে আমরা শুধু main() ফাংশনের আর্গুমেন্ট মডিফাই করব। এইভাবে 'no matching function for the call' to C++ এরর সরানো যাবে। কোডটি এর বিস্তারিত বিবরণের সাথে নিচে দেখা যাচ্ছে।

স্ট্যান্ডার্ড নেমস্পেস ব্যবহার করার পর, আমরা হেডার ফাইল
পরবর্তী ধাপে, আমরা main() মেথড আহ্বান করব। main() ফাংশনের ভিতরে, আমরা 'argc' ইন্টিজার ডেটা টাইপ এবং 'argv' ক্যারেক্টার ডেটা টাইপ আর্গুমেন্ট হিসেবে দিব। 'argc' প্রোগ্রামে অপারেটিং সিস্টেম দ্বারা প্রদত্ত প্যারামিটার সংখ্যা দেখায়। 'argv' হলো একটি প্যারামিটার সংগ্রহ। এখন আমরা ক্লাস 'A'-র একটি অবজেক্ট 'obj' নামে তৈরি করব। আমরা ইন্টিজার ডেটা টাইপের 'value' ভেরিয়েবল ইনিশিয়ালাইজ করব। আমরা অবজেক্টের setValue() মেথড ব্যবহার করব এবং এই ফাংশনের প্যারামিটার হিসেবে 'value' সেট করব।
শেষে, প্রোগ্রাম বন্ধ করতে 'return 0' যোগ করব। মনে রাখবেন যে আমাদের ফাংশনগুলো এবং তাদের আর্গুমেন্টের একই ডেটা টাইপ main() ফাংশনে দিতে হবে। তারপর আমরা সেই ফাংশনটিকে এর অবজেক্টে পাস করব এবং রিটার্ন করব। উপরের কোডের আউটপুট নিচে যাচাই করা যাবে।

উপসংহার
এই নিবন্ধে, আমরা 'no matching function for a call' এরর পাওয়ার কারণ এবং কীভাবে এটা সমাধান করবেন তা আলোচনা করেছি। আমরা যখনই এই এরর পাই, তবে আমাদের কাঙ্ক্ষিত মেথডগুলোর প্যারামিটার এবং তাদের ডেটা টাইপ চেক করতে হবে। আমরা ফাংশন আর্গুমেন্টে আর্গুমেন্ট দিতে সময় ভুল করি। আমরা ফাংশনের প্যারামিটার মিসম্যাচ করি। আমাদের নির্দিষ্ট মেথডে ম্যাচ করা প্যারামিটার দিতে হতে পারে। অথবা একই ডেটা টাইপের একটি নতুন ফাংশন যোগ করতে হতে পারে। প্রোগ্রামে ফাংশনের উপযুক্ত প্যারামিটার চেক করে এবং যোগ করলে, 'no matching function for a call' এরর সমাধান হয়ে যাবে।
লেখক সম্পর্কে
কালসুম বিবি
হ্যালো, আমি একটি ফ্রিল্যান্স রাই্টার এবং সাধারণত লিনাক্স এবং অন্যান্য প্রযুক্তি সংক্রান্ত কন্টেন্ট লিখি।