对于以下代码,我在实现行遇到了一个编译错误: " B没有定义类型"。 我知道把类函数定义放在类声明中的解决方案。但是,是否可以从模板类声明中获取函数定义?感谢
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
}
答案 0 :(得分:4)
由于在B
内定义了A
,您应该使用A<T>::
来限定它:
template<typename T>
typename A<T>::B *A<T>::locate(const T& val) const
{
//logic
}
另请注意typename
这是必需的,因为B
是从属名称。