लेन.एच

class Lane{
    //other declarations..
public:
    Lane(){}
    static Lane left_line;
    static Lane right_line;
};

लेन.सीपीपी

Lane Lane::left_line;

main.cpp

int main(){
    Lane::left_line();  //doesn't work

मैं क्या गलत कर रहा हूँ या मैं सब कुछ गलत कर रहा हूँ। मैं वास्तव में उलझन में हूं कि स्थिर वस्तुएं बिल्कुल कैसे काम करती हैं।

0
Schiphyreon 26 अगस्त 2017, 17:29
हमें त्रुटि संदेश दिखाएं।
 – 
Brian Rodriguez
26 अगस्त 2017, 17:33
"उपयुक्त ऑपरेटर () या रूपांतरण फ़ंक्शन के बिना पॉइंटर-टू-फ़ंक्शन प्रकार के किसी वर्ग प्रकार के ऑब्जेक्ट की कॉल"
 – 
Schiphyreon
26 अगस्त 2017, 17:37
मैं कन्स्ट्रक्टर के माध्यम से left_line ऑब्जेक्ट को प्रारंभ करने का प्रयास कर रहा हूं।
 – 
Schiphyreon
26 अगस्त 2017, 17:38
2
मुझे यकीन नहीं है कि मैं समझता हूं कि आप ऐसा क्यों करना चाहते हैं, एक स्थिर वस्तु का लक्ष्य एक बार शुरू किया जाना है और इसके बारे में सोचने के बिना हर जगह उपयोग किया जाना है। हो सकता है कि कोई अलग व्यवहार हो जिसे आप वास्तव में देखने में रुचि रखते हैं?
 – 
Brian Rodriguez
26 अगस्त 2017, 17:50
1
ठीक है, इसलिए मेरा सुझाव है कि या तो इस जानकारी को शामिल करने के लिए अपने प्रश्न को फिर से लिखें, या एक नया शुरू करें क्योंकि सही समाधान पहले ही दिया जा चुका है। साथ ही, FYI करें, हम इस प्रकार की समस्याओं को "XY समस्या" कहते हैं; शीघ्र सहायता प्राप्त करने के लिए भविष्य में उन्हें ध्यान में रखें!
 – 
Brian Rodriguez
26 अगस्त 2017, 18:14

1 उत्तर

सबसे बढ़िया उत्तर

static सदस्यों को कक्षा के अंदर घोषित किया जाता है और कक्षा के बाहर एक बार आरंभ किया जाता है। कंस्ट्रक्टर को एक बार फिर से कॉल करने की आवश्यकता नहीं है। मैंने इसे स्पष्ट करने के लिए आपकी Lane कक्षा में एक विधि जोड़ी है।

class Lane{
    //other declarations..
public:
    Lane(){}
    static Lane left_line; //<declaration
    static Lane right_line;

   void use() {};
};

लेन.सीपीपी

Lane Lane::left_line; //< initialisation, calls the default constructor of Lane

main.cpp

int main() {
  // Lane::left_line(); //< would try to call a static function called left_line which does not exist
  Lane::left_line.use(); //< just use it, it was already initialised
}

आप ऐसा करके इनिशियलाइज़ेशन को और भी स्पष्ट कर सकते हैं:

Lane Lane::left_line = Lane();

लेन.सीपीपी में

1
muXXmit2X 26 अगस्त 2017, 17:36
नहीं, मुख्य बुलाए जाने से पहले स्टेटिक इनिशियलाइज़ेशन होता है।
 – 
muXXmit2X
26 अगस्त 2017, 17:52