我有一个简单的容器:

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/

10-10 22:16