से घोंसला वाले आंतरिक वर्ग में वापसी सूचक I C++ के लिए नया हूं, इसलिए मेरे साथ भालू। मेरे पास ए जे नामक एक सामान्य वर्ग है जिसे बी ए नामक एक नेस्टेड क्लास है जिसे GetB() नामक एक विधि है, जिसे बी का एक नया उदाहरण वापस करना है। हालांकि, मुझे संकलित करने के लिए मेरा कोड नहीं मिल सकता है। यहाँ यह क्या लगता है जैसे: # शामिलजेनेरिक बाहरी वर्ग
आह
template <class E>
class A {
public:
class B {
public:
int data;
};
B * getB();
};
A.cpp
#include "A.h"
template <class E>
A<E>::B * A::getB() {
return new B();
}
जब मैं इस संकलन करने का प्रयास करें, मैं निम्नलिखित त्रुटि मिलती है:
error: expected constructor, destructor, or type conversion before '*' token
क्या कोई जानता है कि मैं क्या गलत कर रहा हूं?
धन्यवाद,
helixed
अद्यतन:
त्वरित उत्तर हर किसी के लिए धन्यवाद। मुझे अभी भी यह काम करने में थोड़ी परेशानी हो रही है।
A.h
template <class E>
class A {
public:
class B {
public:
int data;
};
B * getB();
};
template <class E>
typename A<E>::B * A<E>::getB() {
return new B();
}
class C {
};
हालांकि, जब मैं मुख्य से इस्तेमाल करने की कोशिश, मैं कोई त्रुटि मिलती है: यहाँ सूचीबद्ध सुझाव लेने के बाद, मैं कुछ इस तरह की है। यहाँ मेरी मुख्य विधि है:
main.cpp
#include "A.h"
int main(int argc, char *argv[])
{
A<C> *a = new A<C>();
A<C>::B *b = a.getB();
}
जब मैं इस संकलन करने का प्रयास करें, मैं निम्नलिखित त्रुटि मिलती है: त्वरित प्रतिक्रिया के लिए फिर से
error: request for member 'getB' in 'a', which is of non-class type 'A<C>*'
धन्यवाद।
helixed
हम्म, Comeau पर काम करता है ।लेकिन अगर यह संकलित भी है, तो क्या इससे मदद मिलेगी? GetB के लिए परिभाषा केवल A.cpp में उपलब्ध होगी। चूंकि यह एक टेम्पलेट है, तब तक इसे किसी अन्य अनुवाद इकाई से नहीं बुलाया जा सकता है जब तक कि आपका कंपाइलर "निर्यात" का समर्थन नहीं करता। –
संपादन का जवाब: सूचक के माध्यम से सदस्य पहुंच के लिए '->' का उपयोग करें। –
ओह, दुह, मैं अब वास्तव में बेवकूफ महसूस करता हूं। मैंने जावा में बहुत अधिक समय बिताया है। मदद स्टीव के लिए धन्यवाद। – LandonSchropp