উত্তর:
যে কোনও জায়গায় একটি সংকলনের ইউনিটে (সাধারণত একটি .cpp ফাইল) করতে হবে:
foo.h
class foo {
static const string s; // Can never be initialized here.
static const char* cs; // Same with C strings.
static const int i = 3; // Integral types can be initialized here (*)...
static const int j; // ... OR in cpp.
};
foo.cpp
#include "foo.h"
const string foo::s = "foo string";
const char* foo::cs = "foo C string";
// No definition for i. (*)
const int foo::j = 4;
(*) মান অনুযায়ী আপনার অবশ্যই i
শ্রেণীর সংজ্ঞা (যেমন j
রয়েছে) এর বাইরে সংজ্ঞা দিতে হবে যদি এটি কেবল অবিচ্ছেদ্য ধ্রুবক এক্সপ্রেশন ছাড়া অন্য কোডে ব্যবহৃত হয়। বিস্তারিত জানার জন্য নীচে ডেভিডের মন্তব্য দেখুন।
i
সংজ্ঞায়িত হতে হবে যদি এটি অবিচ্ছেদ্য ধ্রুবক প্রকাশের চেয়ে অন্য কোথাও ব্যবহৃত হয়, তাই না? এক্ষেত্রে আপনি বলতে পারবেন না যে এখানে একটি ত্রুটি রয়েছে কারণ নিশ্চিত হওয়ার মতো যথেষ্ট প্রসঙ্গ নেই - বা অন্য কোনও কোড না থাকলে উপরের উদাহরণটি কঠোরভাবে বলতে গেলে সঠিক। এখন আমি আপনার মন্তব্যের (+1) প্রশংসা করি, আমি এখনও জিনিস নিজেই শিখছি! সুতরাং আমি চেষ্টা করব এবং উত্তরে সেই পয়েন্টটি পরিষ্কার করব, দয়া করে এটি আরও ভাল কিনা আমাকে
int f() { return 42; } class foo { static const int i = f(); /* Error! */ }
লক্ষ্য করুন সি ++ 11 পারবেন কলিং 'constexpr' ফাংশন:constexpr int f() { return 42; } class foo { static const int i = f(); /* Ok */ }
স্ট্যাটিক সদস্যদের ফাইল স্কোপ বা .cpp অনুবাদ ইউনিটে বা যথাযথ নেমস্পেসে শুরু করতে হবে:
const string foo::s( "my foo");
একই শীর্ষস্থানটির মধ্যে একটি অনুবাদ ইউনিটে, সাধারণত শীর্ষে:
// foo.h
struct foo
{
static const std::string s;
};
// foo.cpp
const std::string foo::s = "thingadongdong"; // this is where it lives
// bar.h
namespace baz
{
struct bar
{
static const float f;
};
}
// bar.cpp
namespace baz
{
const float bar::f = 3.1415926535;
}
কেবলমাত্র অবিচ্ছেদ্য মানগুলি (উদাহরণস্বরূপ static const int ARRAYSIZE
) শিরোনাম ফাইলটিতে সূচনা করা হয় কারণ এগুলি অ্যারের আকারের মতো কোনও কিছু সংজ্ঞায়িত করতে ক্লাস শিরোনামে সাধারণত ব্যবহৃত হয়। অ-অবিচ্ছেদ্য মানগুলি বাস্তবায়ন ফাইলে সূচনা করা হয়।
i
অবশ্যই সিপিপিতে সংজ্ঞায়িত করা উচিত । §৯.৪.২ / ৪ যদি কোনও স্ট্যাটিক ডেটা সদস্য