নতুন সি ++ বৈশিষ্ট্যগুলির আকর্ষণীয় সংঘর্ষ এবং আপনি যা করার চেষ্টা করছেন তার ফলেই সমস্যাটি এসেছে। প্রথমে push_back
স্বাক্ষরটি একবার দেখুন :
void push_back(const T&)
এটি টাইপের কোনও অবজেক্টের রেফারেন্স আশা করে T
। পুরানো প্রারম্ভিক পদ্ধতির অধীনে, এই জাতীয় সদস্য উপস্থিত রয়েছে। উদাহরণস্বরূপ, নিম্নলিখিত কোডগুলি ঠিক জরিমানা সংকলন করেছে:
#include <vector>
class Foo {
public:
static const int MEMBER;
};
const int Foo::MEMBER = 1;
int main(){
std::vector<int> v;
v.push_back( Foo::MEMBER ); // undefined reference to `Foo::MEMBER'
v.push_back( (int) Foo::MEMBER ); // OK
return 0;
}
এটি কারণ যেখানে কোথাও একটি আসল অবজেক্ট রয়েছে যার মধ্যে এটির মান রয়েছে। তবে, আপনি যদি স্ট্যাটিক কনস্টের সদস্যদের নির্দিষ্ট করে দেওয়ার নতুন পদ্ধতিটিতে স্যুইচ করেন তবে আপনার উপরে Foo::MEMBER
যেমন রয়েছে তেমনি কোনও বস্তু নেই। এটি একটি ধ্রুবক, কিছুটা সদৃশ:
#define MEMBER 1
তবে প্রিপ্রেসেসর ম্যাক্রোর মাথা ব্যথা ছাড়াই (এবং প্রকারের সুরক্ষা সহ)। এর অর্থ হ'ল ভেক্টর, যা একটি রেফারেন্সের প্রত্যাশা করছে, এটি পেতে পারে না।