函数声明有什么问题?

时间:2013-04-13 13:25:02

标签: c++ visual-studio-2010

请告诉我,这个方法的声明/描述中有什么错误?

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

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

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

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分: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的范围,Node已知。

答案 2 :(得分:0)

您没有在全局范围中定义Node 所以使用此代码

//by Set::Node we give compiler that this function exist in class Node
Set::Node* &Set::_getLink(const Node *const &root, int t) const
{
   // ...
}