আইএসও সি ++ স্ট্যান্ডার্ড নির্দিষ্ট করে যে কোনও শ্রেণীর খাঁটি-ভার্চুয়াল নয় এমন সমস্ত ভার্চুয়াল পদ্ধতি অবশ্যই সংজ্ঞায়িত করা উচিত।
সরলভাবে এই নিয়মটি রাখুন : যদি আপনার উত্পন্ন শ্রেণিটি বেস শ্রেণীর ভার্চুয়াল পদ্ধতিকে অতিরিক্ত পরিমাণে দেয় তবে এটির পাশাপাশি একটি সংজ্ঞা দেওয়া উচিত, যদি তা না হয় তবে বেস শ্রেণিটি সেই পদ্ধতির সংজ্ঞা প্রদান করে।
আপনার কোড উদাহরণের উপরের নিয়ম অনুসারে, virtual void bar();বেস শ্রেণিতে একটি সংজ্ঞা প্রয়োজন।
তথ্যসূত্র:
সি ++ ০৩ স্ট্যান্ডার্ড: 10.3 ভার্চুয়াল ফাংশন [ক্লাসে ভার্চুয়াল]
একটি শ্রেণিতে ঘোষিত একটি ভার্চুয়াল ফাংশন সংজ্ঞায়িত করা হবে, বা সেই শ্রেণিতে শুদ্ধ (10.4) বা উভয় হিসাবে ঘোষণা করা হবে; তবে কোনও ডায়াগনস্টিকের প্রয়োজন নেই (3.2)।
সুতরাং হয় আপনি ফাংশন বিশুদ্ধ ভার্চুয়াল করা উচিত বা এর জন্য একটি সংজ্ঞা প্রদান করা উচিত।
জিসিসি FAQ doccuments ভাল হিসাবে এটি:
আইএসও সি ++ স্ট্যান্ডার্ড নির্দিষ্ট করে যে খাঁটি-ভার্চুয়াল নয় এমন শ্রেণীর সমস্ত ভার্চুয়াল পদ্ধতি অবশ্যই সংজ্ঞায়িত করা উচিত, তবে এই নিয়ম লঙ্ঘনের জন্য কোনও ডায়গনিস্টিকের প্রয়োজন নেই [class.virtual]/8। এই অনুমানের উপর ভিত্তি করে, জিসিসি কেবল অনুবাদ সংস্থায় স্পষ্টভাবে সংজ্ঞায়িত কনস্ট্রাক্টর, অ্যাসাইনমেন্ট অপারেটর, ডেস্ট্রাক্টর এবং একটি শ্রেণীর ভার্চুয়াল টেবিলটি প্রেরণ করবে যা তার প্রথম অ-ইনলাইন পদ্ধতিটিকে সংজ্ঞায়িত করে।
অতএব, আপনি যদি এই নির্দিষ্ট পদ্ধতিটি সংজ্ঞা দিতে ব্যর্থ হন তবে লিঙ্কার আপাতভাবে সম্পর্কযুক্ত প্রতীকগুলির সংজ্ঞাটির অভাব সম্পর্কে অভিযোগ করতে পারেন। দুর্ভাগ্যক্রমে, এই ত্রুটি বার্তাকে উন্নত করার জন্য, লিঙ্কারটি পরিবর্তন করা প্রয়োজন হতে পারে এবং এটি সর্বদা করা যায় না।
সমাধানটি নিশ্চিত করা হয় যে খাঁটি নয় এমন সমস্ত ভার্চুয়াল পদ্ধতি সংজ্ঞায়িত হয়েছে to নোট করুন যে কোনও ডেস্ট্রাক্টরকে সংজ্ঞা দিতে হবে এমনকি যদি এটি খাঁটি-ভার্চুয়াল হিসাবে ঘোষণা করা হয় [class.dtor]/7।