यहाँ कोड है:

vector<ClientInfo*> OpenRABiz::GetHumans() const {
    vector<ClientInfo*> vec;
    for (auto &c : clients) {
        if (!c.isbot) {
            vec.push_back(&c);
        }
    }
    return vec; // RVO - return value optimization
}

विज़ुअल सी ++ 2019 में, कंपाइलर इसे इंडेंट करता है:

error C2664: 'void std::vector<ClientInfo *,std::allocator<ClientInfo *>>::push_back(_Ty &&)': cannot convert argument 1 from 'const ClientInfo *' to 'const _Ty &'

त्रुटि संदेश: "

const _Ty&" का अर्थ है कि c++ टेम्पलेट सही पैरामीटर नहीं निकाल सकता

.

जब मैं const कीवर्ड लेता हूं, तो यह सफलतापूर्वक संकलित हो जाता है।

vector<ClientInfo*> OpenRABiz::GetHumans()

क्यों?

c++
-1
user3034768 14 सितंबर 2021, 15:56
स्थानीय चर से RVO NRVO है।
 – 
Jarod42
14 सितंबर 2021, 16:06

1 उत्तर

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

आपका clients संभवतः ClientInfo का वेक्टर है, इसलिए const-योग्य सदस्य-फ़ंक्शंस में, client (लूप में) का प्रकार const ClientInfo& है। . जब आप पता &client लेते हैं, तो आपको एक const ClientInfo* मिलता है, जिसे ClientInfo* में नहीं बदला जा सकता।

जब आप const-क्वालिफायर को हटाते हैं, तो सब कुछ ठीक काम करता है क्योंकि client तब ClientInfo& होता है।

समस्या को ठीक करने के लिए, फ़ंक्शन के रिटर्न-प्रकार और vec की घोषणा को std::vector<const ClientInfo*> में बदलें।

3
Holt 14 सितंबर 2021, 16:00
आपके संकेत के लिए धन्यवाद, मुझे मिल गया।
 – 
user3034768
14 सितंबर 2021, 16:12