我这里有一个旧代码库,他们使用受保护的成员变量。这是否是一个好主意可以讨论。但是,代码必须用 gcc3 编译得很好。我有一个派生模板类 Bar,它使用类模板 Foo 中的受保护成员 x 像这样
template <class Something> class Foo {
public:
// stuff...
protected:
some::type x;
}
template <class Something> Bar : Foo<Something> {
public:
void cleanup();
}
在 cleanup() 的方法声明中,x 做了一些事情
template <class Something> void Bar<Something>::cleanup() {
doSomeThingCleanUpLike (x);
}
这不适用于 gcc4,尽管它应该适用于 gcc3。当我将其更改为
doSomeThingCleanUpLike (this->x);
为什么会这样?