জিসিসি ৪.৩-তে সি ++ সংকলন করার সময় আমি এই বার্তাটি পাই
error: ‘NULL’ was not declared in this scope
এটি প্রদর্শিত হয় এবং অদৃশ্য হয়ে যায় এবং কেন জানি না। কেন?
ধন্যবাদ।
জিসিসি ৪.৩-তে সি ++ সংকলন করার সময় আমি এই বার্তাটি পাই
error: ‘NULL’ was not declared in this scope
এটি প্রদর্শিত হয় এবং অদৃশ্য হয়ে যায় এবং কেন জানি না। কেন?
ধন্যবাদ।
উত্তর:
NULLএকটি কীওয়ার্ড নয়। এটি কিছু স্ট্যান্ডার্ড শিরোনামে সংজ্ঞায়িত একটি শনাক্তকারী। আপনি অন্তর্ভুক্ত করতে পারেন
#include <cstddef>
এটিকে আরও কিছু বুনিয়াদি সহ, স্কোপে রাখার জন্য std::size_t।
nullptr, যা একটি আসল কীওয়ার্ড এবং এর জন্য কোনও প্রয়োজন নেই #include। এটি এর চেয়েও বেশি টাইপসেফ NULL।
জিসিসি সি ++ 11, সম্ভবত এই কারণেই আপনি এখন অন্তর্ভুক্ত করতে হবে পদক্ষেপ নিচ্ছে cstddef অর্ডার ব্যবহার করতে আপনাকে অবশ্যই শূন্য ধ্রুবক। সি ++ 11 এ পছন্দসই উপায় হ'ল নতুনটি ব্যবহার করা নলপ্টার কীওয়ার্ডটি , যা জিসিসিতে সংস্করণ ৪. since থেকে কার্যকর করা হয়েছে। নালপ্ট্রার ইন্টিগ্রাল টাইপগুলিতে স্পষ্টভাবে রূপান্তরিত হয় না, সুতরাং এটি কোনও ফাংশনটিতে কল কলহীন করতে ব্যবহার করা যেতে পারে যা পয়েন্টার এবং অবিচ্ছেদ্য উভয় প্রকারের জন্যই ওভারলোড করা হয়েছে:
void f(int x);
void f(void * ptr);
f(0); // Passes int 0.
f(nullptr); // Passes void * 0.
NULLকখনও অন্তর্নির্মিত কীওয়ার্ড হয় নি; এটি <stddef.h>(বা <cstddef>) সহ বেশ কয়েকটি স্ট্যান্ডার্ড সি শিরোনামে সংজ্ঞায়িত ম্যাক্রো । জিসিসি "সি ++ 11 এর দিকে পদক্ষেপ গ্রহণ" কীভাবে এটিকে প্রভাবিত করে? আমি প্রশ্নের মধ্যে এমন কিছুই দেখতে পাচ্ছি যা বোঝায় যে (অদেখা) কোডটি জিসিসি / জি ++ এর পূর্ববর্তী সংস্করণগুলির সাথে বা ভাষার মানের পূর্ববর্তী সংস্করণগুলির সাথে সংকলিত হয়েছে।
NULLএকটি কীওয়ার্ড নয়; এটি 0 এর জন্য ম্যাক্রো প্রতিস্থাপন এবং এটি আসে stddef.hবা হয় cstddef, আমি বিশ্বাস করি। আপনার কাছে #includedযথাযথ শিরোনামের ফাইল নেই, তাই g ++ NULLএকটি নিয়মিত ভেরিয়েবলের নাম হিসাবে দেখে এবং আপনি এটি ঘোষণা করেন নি।
অন্যান্য উত্তরগুলি পূরণ করতে: আপনি যদি সি ++ 11 ব্যবহার করেন তবে ব্যবহার করুন nullptrযা একটি কীওয়ার্ড যার অর্থ শূন্য পয়েন্টারটি নালার দিকে নির্দেশ করা। (পরিবর্তে NULL, যা পয়েন্টার ধরণের নয়)