开发者

Template inheritance inner class access problem

开发者 https://www.devze.com 2023-03-06 08:10 出处:网络
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?

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

精彩评论

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