निम्नलिखित कोड में मैंने एक टेम्प्लेट क्लास बनाया है, इसकी शुरुआत मुख्य फ़ंक्शन में हुई है और मैं char* असाइन करने का प्रयास कर रहा हूं जैसा कि आप नीचे देख सकते हैं लेकिन यह काम नहीं कर रहा है। मुझे लगता है कि समस्या असाइन ऑपरेटर फ़ंक्शन में है जिसे मैंने प्रॉक्सी क्लास में परिभाषित किया है, लेकिन मैं इसका पता नहीं लगा सकता

#include <iostream>
using namespace std;

template <class T>
class Vector {
 public:
    T *p;

    Vector(int size) {
        p = new T[size];
    }

    class Proxy {
        Vector &a;
        int i;

     public:
        Proxy(Vector &a, int i) : a(a), i(i) {
        }

        void operator=(const T x) {
            a.p[i] = x;
        }
    };

    Proxy operator[](int i) {
        return Proxy(*this, i);
    }
};

int main() {
    Vector<char *> sv1(2);
    sv1[0] = "John";
    sv1[1] = "Doe";
}

मुझे निम्न त्रुटि मिल रही है;

Error

मैंने पहले से ही असाइनमेंट ऑपरेटर फ़ंक्शन में const पर पैरामीटर सेट करने का प्रयास किया है, मैंने T पर स्पष्ट रूप से टाइपकास्टिंग करने का भी प्रयास किया है, कुछ भी काम नहीं किया है

0
Chanel 17 अप्रैल 2021, 23:00

1 उत्तर

आपके पास कोड लिखने में एक ही त्रुटि होगी:

चार * जो कुछ भी = "कुछ";

कम से कम स्ट्रिंग के लिए यह कोड बिल्कुल गलत है:

void operator=(const T x)
{
    a.p[i] = x;
}

चरण 1: बफर आवंटित करें; चरण 2: स्ट्रिंग को आवंटित बफर में कॉपी करें।

आपका कोड आदिम जैसे char, int, आदि के लिए ठीक है। निम्नलिखित कोड काम करना चाहिए:

int main() {
    Vector<char> sv1(2);
    sv1[0] = 'J';
    sv1[1] = 'D';
}
1
arin-berd 17 अप्रैल 2021, 21:50