我需要定义模板基类的模板派生类。之前已经问过并回答过这个问题(例如here),但是接受的解决方案给了我编译错误。例如,此代码:
template<typename T>
class Base {
protected:
T i;
};
template<typename T>
class Derived : public Base<T> {
public:
void f(){
i = 1;
}
};
int main(){
Derived<int> d;
}
给出以下错误:
$ g++ test.cpp
test2.cpp: In member function ‘void Derived<T>::f()’:
test2.cpp:11:9: error: ‘i’ was not declared in this scope
i = 1;
^
$ clang++ test2.cpp
test2.cpp:11:9: error: use of undeclared identifier 'i'
i = 1;
^
1 error generated.
所以看起来派生类没有看到母亲定义的变量(用gcc 7.2.1和clang 5.0.0测试)。当然,我必须做错事,但我无法弄清楚是什么,特别是考虑到在question I linked的接受答案中,派生类似乎看到了在母班中定义的'计数器'变量。 谢谢你的帮助。