我有一个简单的容器:
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
或其他内容。错误与此类似。我目前没有可以测试它的机器。
真心感谢任何帮助。
答案 0 :(得分:24)
那是因为node
是一种依赖类型。您需要按如下方式编写签名(请注意,为了清楚起见,我已将其分为2行)
template <class nodeType>
typename list<nodeType>::node* list<nodeType>::_search()
{
//function
}
请注意使用typename
关键字。
答案 1 :(得分:8)
您需要告诉编译器node
是使用关键字typename
的类型。否则,它会将节点视为static
中的class list
变量。每当在节点实现中使用节点作为类型时,添加typename
。