繁体   English   中英

为什么我不能在类之外定义一个返回类型为“指向结构的指针”的函数?

[英]why can't i define a function of return type 'pointer to struct' outside of class?

此代码给出错误“没有声明匹配 Node* List::getNewNode(int)”

class List
{
private:
    struct Node {
        int data;
        Node* next;
    };

private:
    Node* getNewNode(int data);
};

Node* List::getNewNode(int data)
{
    Node* newNode = new Node;
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}

但是这个函数的相同定义在类内部起作用

class List
{
private:
    struct Node {
        int data;
        Node* next;
    } *head = NULL;

private:
    Node* getNewNode(int data)
    {
        Node* newNode = new Node;
        newNode->data = data;
        newNode->next = NULL;
        return newNode;
    }
};

在类声明的括号内定义函数和使用范围解析在类括号外定义函数或返回类型有问题吗? 编译器:minGW x64

如果在类定义之外定义函数,则必须提供Node的解析(因为它是嵌套类):

List::Node* List::getNewNode(int data)
{
    Node* newNode = new Node;
    newNode->data = data;
    newNode->next = nullptr;
    return newNode;
}

这是 C++ 中奇怪的元素之一。 问题是解析器不(不允许)知道您正在使用 List 的子类。 相反,它在全局命名空间和所有使用的命名空间中搜索类 Node。

要解决此问题,您应该在类型前加上列表。

 List::Node* List::getNewNode(int data)

如今,您还可以使用尾随返回类型来指定您的函数。

 auto List::getNewNode(int data) -> Node*

由于 Node 现在在函数之后,解析器已经知道您在 List 范围内并且可以找到正确的类。 连同这种简化,一些人认为这是一种更一致的代码编写方式,因为它类似于 lambda 的工作方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM