0

Please help me I don't know what happens. It shows error C2955: 'MyClass' : use of class template requires template argument list

template <class T> class MyClass
{
protected:
    struct MyStruct
    {
    };

    MyStruct* GetElement(...) const;
}

//error C2955: 'MyClass' : use of class template requires template argument list
//I tried: 
// MyClass<T>::MyStruct* MyClass<T>::GetElement(...) const
// MyStruct* MyClass<T>::GetElement(...) const
// but none works. This method doesn't use T.
template<class T>
MyClass::MyStruct* MyClass<T>::GetElement(...) const
{

}
0

2 Answers 2

1

These fixes work

template <class T> class MyClass {
protected:
    struct MyStruct
    {
    };

    MyStruct* GetElement(...) const;
}; // << add semicolon

template <class T>
// Add typename
typename MyClass<T>::MyStruct* MyClass<T>::GetElement(...) const {
     // Add <T> ^^^
    return NULL;
}

Any type that depends on the template parameter must be specified with typename.

Sign up to request clarification or add additional context in comments.

Comments

0

The return type of GetElement should be written as typename MyClass<T>::MyStruct*:

template<class T>
typename MyClass<T>::MyStruct* MyClass<T>::GetElement(...) const
{

}

The <T> is necessary because MyClass is a template class. typename is needed because MyClass<T>::MyStruct is a dependent name.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.