नई C ++ सुविधाओं की एक दिलचस्प झड़प और आप जो करने की कोशिश कर रहे हैं, उसके कारण समस्या आती है। सबसे पहले, 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
लेकिन एक प्रीप्रोसेसर मैक्रो के सिरदर्द के बिना (और प्रकार की सुरक्षा के साथ)। इसका मतलब है कि वेक्टर, जो एक संदर्भ की उम्मीद कर रहा है, एक नहीं मिल सकता है।