1

请向我解释一下,这种方法的声明/描述中有什么错误?

class Set
{
    struct Node {
        // ...
    };
    // ...
    Node* &_getLink(const Node *const&, int) const;
    // ...
};

Node* &Set::_getLink(const Node *const &root, int t) const
{
    // ...
}

我没有看到错误,但编译器(MS VS C++)给出了许多语法错误。

4

3 回答 3

3

您忘记了完全限定的名称Node(在 的范围内定义Set):

    Set::Node* &Set::_getLink(const Node *const &root, int t) const
//  ^^^^^

如果没有完全限定,编译器将查找名为 的全局类型Node,该类型不存在。

于 2013-04-13T13:26:30.020 回答
0

问题是范围界定问题。您需要在Node此处添加前缀:

Set::Node* &Set::_getLink(const Node *const &root, int t) const
{
    // ...
}

实际上,Node在遇到它时是未知的(您在命名空间范围内,而不是在Set的范围内)。您还可以使用auto

auto Set::_getLink(const Node *const &root, int t) const -> Node *&
{
    // ...
}

之后->,您就在Set's 范围内并且Node为人所知。

于 2013-04-13T13:26:37.647 回答
0

您没有在全局范围内定义节点,
因此请使用此代码

//by Set::Node we give compiler that this function exist in class Node
Set::Node* &Set::_getLink(const Node *const &root, int t) const
{
   // ...
}
于 2013-04-13T13:30:56.497 回答