模板派生类的模板基类

时间:2017-12-13 17:33:23

标签: c++ templates inheritance

我需要定义模板基类的模板派生类。之前已经问过并回答过这个问题(例如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的接受答案中,派生类似乎看到了在母班中定义的'计数器'变量。 谢谢你的帮助。

0 个答案:

没有答案