模板和嵌套类/结构

发布于 2024-08-10 14:07:23 字数 940 浏览 9 评论 0原文

我有一个简单的容器:

template <class nodeType> list {
    public:
        struct node {
            nodeType info;
            node* next;
        };

    //...
};

现在,有一个名为 _search 的函数,它搜索列表并返回对匹配节点的引用。现在,当我提到函数的返回类型时,我认为它应该是 list::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::_search 或其他内容。该错误与此类似。我目前没有可以测试它的机器。

真诚感谢任何帮助。

I have a simple container :

template <class nodeType> list {
    public:
        struct node {
            nodeType info;
            node* next;
        };

    //...
};

Now, there is a function called _search which searches the list and returns a reference to the node which matched. Now, when I am referring to the return-type of the function, I think it should be list<nodeType>::node*. Is this right? When I define the function inline, it works perfectly:

template <class nodeType> list {
    public:
        struct node {
            nodeType info;
            node* next;
        };

        node* _search {
            node* temp;
            // search for the node
            return temp;
        }
};

But, if I define the function outside the class,

template <class nodeType> list<nodeType>::node* list<nodeType>::_search() {
    //function
}

it doesn't work. The compiler gives an error saying Expected constructor before list<nodeType>::_search or something. The error is something similar to this. I don't have a machine on which I can test it currently.

Any help is sincerely appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

遗心遗梦遗幸福 2024-08-17 14:07:24

这是因为 node 是一个依赖类型。您需要按如下方式编写签名(请注意,为了清楚起见,我将其分成两行)

template <class nodeType> 
typename list<nodeType>::node* list<nodeType>::_search() 
{
    //function
}

请注意 typename 关键字的使用。

that's because node is a dependent type. You need to write the signature as follows (note that I have broken it into 2 lines for clarity)

template <class nodeType> 
typename list<nodeType>::node* list<nodeType>::_search() 
{
    //function
}

Note the use of the typename keyword.

转身泪倾城 2024-08-17 14:07:24

您需要使用关键字 typename 告诉编译器 node 是一个类型。否则它会认为 Node 是 中的 static 变量类列表。每当您在列表实现中使用节点作为类型时,请添加typename

You need to tell the compiler that node is a type using the keyword typename.Otherwise it will think node as a static variable in class list. Add typename whenever you use node as a type in your implementation of list.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文