मेरे पास एक टेम्पलेट वर्ग है:

template <class T>
class A 
{
 ...
 protected:
  T m_value;
}

और मैं चाहता हूं कि वैक्टर के लिए इस वर्ग का उपयोग करके एक टेम्पलेट बनाएं:

template <class T>
class B:public A<std::vector<T>> //no need of space between >> (c++11)
{
 void testSize()
 {
    if(m_value.size() > ...)
    {
        ...
    }
 }
}

संकलक शिकायत करता है: त्रुटि: 'm_value' इस दायरे में घोषित नहीं किया गया था

क्या ऐसा कोई तरीका है जिससे मैं यह कर सकता हूं या क्या मुझे इस फ़ंक्शन को प्रत्येक std::vector प्रकार के लिए सीधे ए क्लास का उपयोग करके रिकोड करना है?

धन्यवाद,

संपादित करें:

मैंने यह कोशिश की है:

template <class T>
class B:public A<std::vector<T>> //no need of space between >> (c++11)
{
 void testSize()
 {
    if(m_value.size() > ...)
    {
        ...
    }
 }

 std::vector<T> m_value;
}

संकलक अब शिकायत नहीं करता है, लेकिन कक्षा ए में बुलाए गए m_value को कक्षा बी के m_value का संदर्भ देता है?

1
user3541297 29 जुलाई 2017, 03:12

1 उत्तर

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

आपके पहले उदाहरण में, m_value एक आश्रित नाम है।
इसे B के भीतर से सही ढंग से संदर्भित करने के लिए ऐसा करें:

this->m_value.size()

यानी, अपने if स्टेटमेंट को इसमें बदलें:

if(this->m_value.size() > ...)

इसके बजाय संपादन अनुभाग में कोड गलत है। कक्षा B और कक्षा A क्रमशः m_value की अपनी प्रति को संदर्भित करेंगे।

3
skypjack 29 जुलाई 2017, 11:36
बहुत - बहुत धन्यवाद! इतना सरल कि मुझे शर्म आती है!
 – 
user3541297
29 जुलाई 2017, 13:56