请帮帮我,我不知道会发生什么。表明 错误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
{
}
答案 0 :(得分:1)
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>
是必要的,因为MyClass
是template class。需要typename
因为MyClass<T>::MyStruct
是dependent name。