मैं सी ++ में थोडा नया हूं, इसलिए मुझे कुछ मदद चाहिए। मुझे एक समारोह के लिए टिकट बुक करने के लिए एक समारोह बनाना है।

  void Event::book(int row, int seat, Date date, char *name, char *note)
{
    if(this->date==date && strcmp(this->name,name)==0)
    {
        if(hall.seatsInHall[row-1][seat-1].isFree()==true)
        {
            hall.seatsInHall[row-1][seat-1].isFree()=false; // here it gives me non-lvalue in assignment
            hall.seatsInHall[row-1][seat-1].getNote()=note; // here it gives me non-lvalue in assignment
            hall.seatsInHall[row-1][seat-1].getNote()=note; // here it gives me non-lvalue in assignment
            cout<<"Seat Booked.";
        }
        else cout<<"This seat is already taken or bought.";
    }
    else cout<<"Error.";
}

इस गलती को न दिखाने के लिए मैं क्या कर सकता हूं?

-2
Priss Bliznakova 13 जून 2020, 02:20

1 उत्तर

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

समस्या इसलिए उत्पन्न होती है क्योंकि असाइनमेंट स्टेटमेंट के बाईं ओर की चीजें लैवल्यू नहीं हैं यानी आप उन्हें मान असाइन नहीं कर सकते हैं। सबसे संभावित कारण यह है कि getNote() और isFree() मूल्य-दर-मूल्य लौट रहे हैं। एक फ़ंक्शन एक लैवल्यू लौटा सकता है यदि (और केवल अगर) यह एक संदर्भ देता है।

आपको यह सुनिश्चित करने की ज़रूरत है कि isFree() और getNote() गैर-कॉन्स्टेंस संदर्भ लौटाएं।

आपकी पोस्ट में समस्या वाले दो कार्यों के लिए, वे इस तरह दिख सकते हैं:

bool& isFree()

char*& getNote()

हालांकि यह आपकी त्रुटियों को ठीक करना चाहिए, गेटनोट के मामले में, यह बहुत सुंदर नहीं है। इसके अलावा, यह स्पष्ट नहीं है कि किस ऑब्जेक्ट के पास char* डेटा का स्वामित्व है और इससे बाद में मेमोरी लीक हो सकती है। एक बेहतर उपाय यह होगा कि नोट को char* के बजाय std::string में बदल दिया जाए।

आपका मूल फ़ंक्शन हस्ताक्षर तब दिखेगा:

void Event::book(int row, int seat, Date date, char *name, std::string note)

और getNote() के हस्ताक्षर होंगे:

std::string& getNote()
0
SuperKingLol 13 जून 2020, 13:10