我有一个简单的容器:
template <class nodeType> list {
public:
struct node {
nodeType info;
node* next;
};
//...
};
现在,有一个名为
_search
的函数,该函数搜索列表并返回对匹配节点的引用。现在,当我指代函数的返回类型时,我认为它应该是list<nodeType>::node*
。这是正确的吗?当我内联定义函数时,它可以完美地工作:template <class nodeType> list {
public:
struct node {
nodeType info;
node* next;
};
node* _search {
node* temp;
// search for the node
return temp;
}
};
但是,如果我在类外定义函数,
template <class nodeType> list<nodeType>::node* list<nodeType>::_search() {
//function
}
它不起作用。编译器显示
Expected constructor before list<nodeType>::_search
之类的错误。错误与此类似。我没有目前可以在其上进行测试的机器。真诚的感谢您的帮助。
最佳答案
那是因为node
是一个依赖类型。您需要按如下方式编写签名(请注意,为清楚起见,我将其分为两行)
template <class nodeType>
typename list<nodeType>::node* list<nodeType>::_search()
{
//function
}
注意
typename
关键字的使用。关于c++ - 模板和嵌套的类/结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1694063/