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