Jas*_*ker 5 c++ gcc g++ visual-c++
在visual C++中,我可以做这样的事情:
template <class T>
class A{
protected:
T i;
};
template <class T>
class B : public A<T>{
T geti() {return i;}
};
Run Code Online (Sandbox Code Playgroud)
如果我尝试用g ++编译它,我会收到一个错误.我必须这样做:
template <class T>
class B : public A<T>{
T geti() {return A<T>::i;}
};
Run Code Online (Sandbox Code Playgroud)
我不应该在标准C++中做前者吗?或者是gcc错误配置给我错误的东西?
这曾经被允许,但在gcc 3.4中有所改变.
在模板定义中,非限定名称将不再找到依赖库的成员(由C++标准中的[temp.dep]/3指定).例如,
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
}
};
Run Code Online (Sandbox Code Playgroud)
您必须使名称依赖,例如通过在其前面加上this->.这是C :: h的更正定义,
template <typename T> void C<T>::h ()
{
this->m = 0;
this->f ();
this->n = 0
this->g ();
}
Run Code Online (Sandbox Code Playgroud)