Я пытаюсь понять, почему я получаю ошибку в этом коде:
(ошибка в g ++ unix compiler. VS компилируется нормально)
template<class T> class A {
public:
T t;
public:
A(const T& t1) : t(t1) {}
virtual void Print() const { cout<<*this<<endl;}
friend ostream& operator<<(ostream& out, const A<T>& a) {
out<<"I'm "<<typeid(a).name()<<endl;
out<<"I hold "<<typeid(a.t).name()<<endl;
out<<"The inner value is: "<<a.t<<endl;
return out;
}
};
template<class T> class B : public A<T> {
public:
B(const T& t1) : A<T>(t1) {}
const T& get() const { return t; }
};
int main() {
A<int> a(9);
a.Print();
B<A<int> > b(a);
b.Print();
(b.get()).Print();
return 0;
}
Этот код выдает следующую ошибку:
main.cpp: в функции-члене 'const T & B :: get () const':
main.cpp: 23: ошибка: 't' не было объявлено в этой области
Это скомпилировано, когда я изменил код B на это:
template<class T> class B : public A<T> {
public:
B(const T& t1) : A<T>(t1) {}
const T& get() const { return A<T>::t; }
};
Я просто не могу понять, в чем проблема с первым кодом ...
Не имеет смысла, что мне действительно нужно писать «A ::» каждый раз ...