الوصول إلى محمية أعضاء من أقسام فرعية:دول مجلس التعاون الخليجي مقابل msvc
-
10-07-2019 - |
سؤال
في visual C++, أنا يمكن أن تفعل أشياء من هذا القبيل:
template <class T>
class A{
protected:
T i;
};
template <class T>
class B : public A<T>{
T geti() {return i;}
};
إذا كنت في محاولة لتجميع هذه g++, أحصل على خطأ.يجب أن أفعل هذا:
template <class T>
class B : public A<T>{
T geti() {return A<T>::i;}
};
أنا ليس من المفترض أن تفعل السابق في المعيار C++?أو هو شيء تكوينها مع دول مجلس التعاون الخليجي أن يعطيني أخطاء ؟
المحلول
ويستخدم هذا أن يسمح، ولكن تغيرت في دول مجلس التعاون الخليجي 3.4 .
في تعريف قالب، وأسماء غير مؤهل لم يعد يجد أعضاء قاعدة تعتمد (كما هو محدد من قبل [temp.dep] / 3 في مستوى C ++). على سبيل المثال،
template <typename T> struct B {
int m;
int n;
int f ();
int g ();
};
int n;
int g ();
template <typename T> struct C : B<T> {
void h ()
{
m = 0; // error
f (); // error
n = 0; // ::n is modified
g (); // ::g is called
}
};
ويجب التأكد أسماء تعتمد، على سبيل المثال قبل التقديم لهم هذا->. هنا هو التعريف الصحيح من C :: ح،
template <typename T> void C<T>::h ()
{
this->m = 0;
this->f ();
this->n = 0
this->g ();
}
نصائح أخرى
أنا أحسب هذا الأمر:
- C++ سوبر التعليمات:"لماذا أنا الحصول على أخطاء عند قالب بلدي المستمدة من الدرجة يستخدم متداخلة نوع فإنه يرث من قالب قاعدة-الصف؟"
- C++ سوبر التعليمات:"لماذا أنا الحصول على أخطاء عند قالب بلدي المستمدة من الدرجة يستخدم الأعضاء فإنه يرث من قالب قاعدة-الصف؟"
يبدو المثال الأول غير صالح C++ ومن السيء أن msvc يأخذ هذا.هناك حلول نشر على C++ التعليمات لايت.
ويمكنك أن تقرأ حول اسم مرحلتين البحث
لا تنتمي إلى StackOverflow