开发者

Template inheritance inner class access problem

I can't believe gcc won't accept the following code... Please tell me if accessing an inner class from a base template is really not possible or am i missing something?

template <class T> class BaseClass
{
public:
    struct MyStruct
    {
        T *data;
    };
};

template <class T> class ChildClass : public BaseClass <T>
{
    开发者_C百科public:

    void problem()
    {
        MyStruct ms1; //error: 'MyStruct' was not declared in this scope
        ::MyStruct ms2; //error: '::MyStruct' has not been declared
        BaseClass<T>::MyStruct ms3; //error: expected `;' before 'ms3'
    }
};


The problem is that MyStruct is a dependent name, so you have to tell the compiler to defer name lookup until the template is instantiated by qualifying it with the base class name:

typename BaseClass<T>::MyStruct ms1;

For more information, I'd read the Parashift C++ FAQ entry, "Why am I getting errors when my template-derived-class uses a nested type it inherits from its template-base-class?"


BaseClass<T>::MyStruct ms3;

Should be

typename BaseClass<T>::MyStruct ms3;

Since the MyStruct is a dependent name, i.e., it depends on the template argument.
Relevant: Where and why do I have to put “template” and “typename” on dependent names?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜