C ++在模板类中返回受保护的struct指针

时间:2014-07-15 16:15:59

标签: c++

请帮帮我,我不知道会发生什么。表明 错误C2955:'MyClass':使用类模板需要模板参数列表

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
{

}

2 个答案:

答案 0 :(得分: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;
}

必须使用typename指定依赖于模板参数的任何类型。

答案 1 :(得分:0)

GetElement的返回类型应写为typename MyClass<T>::MyStruct*

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

}

<T>是必要的,因为MyClasstemplate class。需要typename因为MyClass<T>::MyStructdependent name