C++ 模板类的成员函数可以';是否返回指向成员结构的指针?
此代码未编译(给出错误C2059、C2065、C2072、C2143、C2146、C2447、C2470、C4430) 但如果将B*更改为int之类的内置类型,则会发生这种情况。 有什么想法吗C++ 模板类的成员函数可以';是否返回指向成员结构的指针?,c++,templates,C++,Templates,此代码未编译(给出错误C2059、C2065、C2072、C2143、C2146、C2447、C2470、C4430) 但如果将B*更改为int之类的内置类型,则会发生这种情况。 有什么想法吗 template <typename T> class A { private: struct B { T key; }; B* foobar(T key); }; template <typename T> B* A<T
template <typename T>
class A
{
private:
struct B
{
T key;
};
B* foobar(T key);
};
template <typename T>
B* A<T>::foobar(T key)
{
B* ptr = new B;
B->key = key;
return ptr;
}
int main()
{}
模板
甲级
{
私人:
结构B
{
T键;
};
B*foobar(T键);
};
样板
B*A::foobar(T键)
{
B*ptr=新的B;
B->key=key;
返回ptr;
}
int main()
{}
您的方法中有一些错误
1) 返回类型的范围必须正确限定
2) 如果是a:::B
实例,而不是B
,则必须设置键
试试这个:
template <typename T>
typename A<T>::B* A<T>::foobar(T key) // fix error 1)
{
B* ptr = new B();
ptr->key = key; // fix error 2)
return ptr;
}
模板
typename A::B*A::foobar(T键)//修复错误1)
{
B*ptr=新的B();
ptr->key=key;//修复错误2)
返回ptr;
}
您的方法中有一些错误
1) 返回类型的范围必须正确限定
2) 如果是a:::B
实例,而不是B
,则必须设置键
试试这个:
template <typename T>
typename A<T>::B* A<T>::foobar(T key) // fix error 1)
{
B* ptr = new B();
ptr->key = key; // fix error 2)
return ptr;
}
模板
typename A::B*A::foobar(T键)//修复错误1)
{
B*ptr=新的B();
ptr->key=key;//修复错误2)
返回ptr;
}
返回类型应该是typename A::B*
,而不仅仅是B*
:
template<typename T>
typename A<T>::B* A<T>::foobar(T key)
{
//..
}
模板
typename A::B*A::foobar(T键)
{
//..
}
请注意返回类型中的typename
关键字。返回类型应为typename A::B*
,而不仅仅是B*
:
template<typename T>
typename A<T>::B* A<T>::foobar(T key)
{
//..
}
模板
typename A::B*A::foobar(T键)
{
//..
}
还要注意返回类型中的typename
关键字。新B()的意义是什么?我们正在调用默认初始化器吗?仅仅“新B”有什么区别吗?@IshanBhatnagar在这种情况下没有区别。您可以使用new B
,它也会调用默认构造函数。new B()的意义是什么?我们正在调用默认初始化器吗?仅仅“新B”有什么区别吗?@IshanBhatnagar在这种情况下没有区别。您可以使用newb
,这也会调用默认构造函数。