为什么我会得到“仅返回类型不同的函数不能重载”当没有任何东西真正超载时会出错?

发布于 2025-01-13 15:01:43 字数 1468 浏览 1 评论 0原文

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

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

发布评论

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

评论(1

じее 2025-01-20 15:01:43

这里的问题相当简单。在定义其含义之前,您正在尝试使用 employee。将 employee 的定义移到 get_employee 的定义之前。

#include<iostream>
#include<string>

class employee {
public:
    int id;
    std::string name;
};

employee get_employee() {
    employee out = { 1, "John"};
    return out;
}

int main() {
    std::cout << get_employee().name;
    return 0;
}

至于为什么编译器给出了一个糟糕的错误消息,我的猜测是返回类型的未定义名称以某种方式欺骗它接受对 get_employee 的调用,因为它在旧的 C 中,没有声明的函数被假定返回类型 int

然后,当它遇到 get_employee 的实际定义时,它已经有一个条目表示 get_employee returns int 并且不接受任何参数,现在看看它是什么思考是一种重载的尝试,它也不带任何参数,但返回一个客户端

这使它相信它所看到的是使用相同参数列表(即没有参数)但返回类型不同的重载尝试。

The problem here is fairly simple. You're trying to use employee before you've defined what it means. Move your definition of employee before the definition of get_employee.

#include<iostream>
#include<string>

class employee {
public:
    int id;
    std::string name;
};

employee get_employee() {
    employee out = { 1, "John"};
    return out;
}

int main() {
    std::cout << get_employee().name;
    return 0;
}

As to why the compiler gives a poor error message, my guess is that somehow or other the undefined name for the return type is tricking it into accepting the call to get_employee as it would have in old C, where a function without a declaration is presumed to return type int.

Then when it encounters the actual definition of get_employee, it has one entry already saying get_employee returns int and takes no arguments, and now sees what it's thinking is an attempt at overloading that also takes no arguments, but returns a client instead.

And that convinces it that what it's seeing is an attempt at overloading that uses the same parameter list (i.e., no parameters) but a different return type.

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