বলুন আমার নীচের (খুব সাধারণ) কোড রয়েছে।
#include <iostream>
int main() {
std::cout << std::stoi("12");
}
এটি জি ++ এবং ঝনঝন উভয় ক্ষেত্রেই সূক্ষ্ম সংকলন করে; তবে, এটি নিম্নলিখিত ত্রুটির সাথে এমএসভিসিতে সংকলন করতে ব্যর্থ হয়েছে:
ত্রুটি C2039: 'স্টোই': 'স্টাডি' এর সদস্য নয়
ত্রুটি C3861: 'স্টোই': সনাক্তকারী পাওয়া যায় নি
আমি জানি যে std::stoiএটি <string>শিরোলেখের অংশ , যা সম্ভবত দু'জন প্রাক্তন সংকলক অংশ হিসাবে অন্তর্ভুক্ত করেছে <iostream>এবং পরবর্তীটি তা নয়। সি ++ স্ট্যান্ডার্ড অনুসারে [রেস.অন.হ্যাডারস]
একটি সি ++ শিরোনামে অন্যান্য সি ++ শিরোনাম অন্তর্ভুক্ত থাকতে পারে।
যা আমার কাছে, মূলত বলে যে তিনটি সংকলকই সঠিক।
এই সমস্যাটি তখন উত্থাপিত হয়েছিল যখন আমার একজন শিক্ষার্থী কাজ জমা দিয়েছেন, যা টিএ সংকলন নয় হিসাবে চিহ্নিত করেছে; আমি অবশ্যই গিয়েছিলাম এবং এটি ঠিক করেছিলাম। যাইহোক, আমি ভবিষ্যতে এই জাতীয় ঘটনাগুলি আটকাতে চাই। সুতরাং, প্রতিবার যাচাই করার জন্য তিনটি পৃথক সংকলককে সংকলন না করে কোন শিরোলেখ ফাইলগুলি অন্তর্ভুক্ত করা উচিত তা নির্ধারণ করার কোনও উপায় আছে?
আমি ভাবতে পারি একমাত্র উপায় হ'ল এটি নিশ্চিত করা যে প্রতিটি stdফাংশন কলের জন্য একটি উপযুক্ত অন্তর্ভুক্ত থাকে; তবে আপনার যদি বিদ্যমান কোড রয়েছে যা কয়েক হাজার লাইনের দীর্ঘ, এটি অনুসন্ধান করা ক্লান্তিকর হতে পারে। ক্রস সংকলক সামঞ্জস্যতা নিশ্চিত করার একটি সহজ / আরও ভাল উপায় আছে?
তিনটি সংকলক সহ উদাহরণ: https://godbolt.org/z/kJhS6U
std::stoi, আপনি তাত্ক্ষণিকভাবে নিশ্চিত হয়ে গেছেন যে #include <string>উপস্থিত রয়েছে।
std::stoiপরিচালনা করার জন্য এটি আপনি অনুমান করতে পারেন যে এটি অন্তর্ভুক্ত করা ভাল শিরোনাম হবে। অথবা আপনি একটি ভাল রেফারেন্স অনুসন্ধান করতে পারেন যা আপনাকে জানাবে। এবং আমি আপনাকে সুপারিশ করি যে আপনি সর্বদা স্পষ্টভাবে শিরোলেখ ফাইলগুলিকে অন্তর্ভুক্ত করুন, সুতরাং আপনাকে পোর্টেবল অযোগ্য প্রয়োগের নির্দিষ্ট আচরণের উপর নির্ভর করতে হবে না।<string>