为什么我无法通过模板访问子类型?

时间:2011-06-16 09:20:13

标签: c++ templates inheritance typename

这是一个例子。我在模板内typename T::SubType*但在外面没有错误。

使用gcc0x我得到

prog.cpp: In instantiation of 'TemplateBase<A>':
prog.cpp:8:36:   instantiated from here
prog.cpp:4:22: error: invalid use of incomplete type 'class A'
prog.cpp:8:7: error: forward declaration of 'class A'

在vs中我得到一些随机错误信息。这是代码。

template< typename T >
struct TemplateBase {
        void ff() {}
        typename T::SubType*f(){ return 0; }
        //typename T::SubType*f();
};

class A : public TemplateBase< A > {
public:
        //struct SubTypeT {
        struct SubType {
        int i;
        };
        //typedef SubTypeT SubType;
private:
        SubType m;
};

template<typename T>
typename T::SubType*f(){ return 0; }

int main() {
        f<A>();
        A a;
        a.ff();
}

1 个答案:

答案 0 :(得分:4)

一个类在结束括号中完全定义,而不是在您列出其父类的位置。因此,在class A : public TemplateBase< A > {中,您将使用不完整的A类实例化TemplateBase