C++ C++;模板-类内结构
对于以下代码,我在实现行得到一个编译错误,如下所示: “B不定义类型”。 我知道将函数定义放在类声明中的解决方案。但是,是否可以将函数定义从模板类声明中删除?谢谢C++ C++;模板-类内结构,c++,templates,C++,Templates,对于以下代码,我在实现行得到一个编译错误,如下所示: “B不定义类型”。 我知道将函数定义放在类声明中的解决方案。但是,是否可以将函数定义从模板类声明中删除?谢谢 template<typename T> class A { public: // ctor, dtor and interface funcs etc private: struct B { T value; B *next; }
template<typename T>
class A {
public:
// ctor, dtor and interface funcs etc
private:
struct B {
T value;
B *next;
}
B *locate(const T& val) const;
// blah blah
};
template<typename T>
B *A<T>::locate(const T& val) const
{
//logic
}
模板
甲级{
公众:
//ctor、dtor和接口函数等
私人:
结构B{
T值;
B*下一步;
}
B*定位(常数T&val)常数;
//废话
};
样板
B*A::定位(常数T&val)常数
{
//逻辑
}
既然B
是在A
中定义的,您应该用A::
来限定它:
template<typename T>
typename A<T>::B *A<T>::locate(const T& val) const
{
//logic
}
模板
typename A::B*A::locate(const T&val)const
{
//逻辑
}
另请注意,
typename
是必需的,因为B
是一个从属名称。因为B
是在a
中定义的,您应该用a:::
对其进行限定:
template<typename T>
typename A<T>::B *A<T>::locate(const T& val) const
{
//logic
}
模板
typename A::B*A::locate(const T&val)const
{
//逻辑
}
另外请注意
typename
,这是必需的,因为B
是一个从属名称。谢谢,您很合适。“typename”是我遗漏的。确认冯登是正确的;这有助于我在嵌套类模板中的其他类或结构时更好地理解模板。谢谢,您的支持。“typename”是我遗漏的。确认冯登是正确的;这有助于我在类模板中嵌套其他类或结构时更好地理解模板。