में विशिष्ट टेम्पलेट मैत्री, मेरे पास सी ++ में विशिष्ट टेम्पलेट मैत्री के लिए एक प्रश्न है। पुस्तक सी ++ प्राइमर में , विशिष्ट टेम्पलेट दोस्ती इस तरह लिखा है:सी ++
template <class T> class Foo3;
template <class T> void templ_fcn3(const T&);
template <class Type> class Bar {
// each instantiation of Bar grants access to the
// version of Foo3 or templ_fcn3 instantiated with the same type
friend class Foo3<Type>;
friend void templ_fcn3<Type>(const Type&);
// ...
};
विशेष बात यह है कि वहाँ
<Type>
दोस्त बयान में वर्ग या समारोह के नाम के बाद
है।
हालाँकि, व्यवहार में, अगर मैं लिखना इस:
template <class Type> class T_CheckPointer;
template <class T> T_CheckPointer<T> operator+(const T_CheckPointer<T> &, const size_t n);
template <typename Type>
class T_CheckPointer {
// Specific Template Friendship
friend T_CheckPointer<Type>
operator+ <Type> (const T_CheckPointer<Type> &, const size_t n);
// other code...
}
वहाँ एक त्रुटि टेम्पलेट समारोह के लिए instantiations दौरान किया जाएगा।
और अगर मैं समारोह के नाम के बाद शब्द प्रकार हटा कर
// Specific Template Friendship
friend T_CheckPointer<Type>
operator+ <Type> (const T_CheckPointer<Type> &, const size_t n);
बदलने
// Specific Template Friendship
friend T_CheckPointer<Type>
operator+ <> (const T_CheckPointer<Type> &, const size_t n);
है, तो सब ठीक हो जाएगा।
कोई मुझे कारण बता सकता है?
जानकारी के लिए, वहाँ त्रुटि संदेश है जब मैं
int iarr[] = {1, 2, 3, 4};
T_CheckPointer<int> itcp(iarr, iarr+4);
त्रुटि संदेश फोन:
/usr/include/c++/4.4/bits/stl_iterator_base_types.h: In instantiation of ‘std::iterator_traits<int>’:
/usr/include/c++/4.4/bits/stl_iterator.h:96: instantiated from ‘std::reverse_iterator<int>’
../Classes/T_CheckPointer.hpp:31: instantiated from ‘T_CheckPointer<int>’
../PE16.cpp:520: instantiated from here
/usr/include/c++/4.4/bits/stl_iterator_base_types.h:127: error: ‘int’ is not a class, struct, or union type
/usr/include/c++/4.4/bits/stl_iterator_base_types.h:128: error: ‘int’ is not a class, struct, or union type
/usr/include/c++/4.4/bits/stl_iterator_base_types.h:129: error: ‘int’ is not a class, struct, or union type
/usr/include/c++/4.4/bits/stl_iterator_base_types.h:130: error: ‘int’ is not a class, struct, or union type
/usr/include/c++/4.4/bits/stl_iterator_base_types.h:131: error: ‘int’ is not a class, struct, or union type
त्रुटि संदेश क्या है? – enobayram
@enobayram, आपके ध्यान के लिए धन्यवाद, मैंने उन्हें लेख में रखा है। – Tianyi
क्या आप ** न्यूनतम ** उदाहरण प्रदान कर सकते हैं (जो कि उदाहरण पर संकलित करता हैविचार) जो समस्या प्रदर्शित करता है? और क्या आपने जीसीसी 4.7 में अपग्रेड करने का प्रयास किया? – TemplateRex