![](/img/trans.png)
[英]Why can I access a struct defined inside a function from outside the function through return type deduction?
[英]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.