gpt4 book ai didi

c++ - 使用 auto 作为函数返回类型时出错

转载 作者:行者123 更新时间:2023-12-05 08:21:39 24 4
gpt4 key购买 nike

我正在使用此处列出的资源学习 C++。特别是,我读到我们可以使用 auto type specifier 作为函数的返回类型。因此,为了弄清楚这个概念,我尝试了以下示例:

header.h

#pragma once
struct S
{
auto f();
};

源.cpp

#include "header.h"

auto S::f()
{
return 4;
}

main.cpp


#include <iostream>
#include "header.h"
int main()
{
S s;
s.f();
return 0;
}

但这给了我错误的说法:

main.cpp:7:9: error: use of ‘auto S::f()’ before deduction of ‘auto’
7 | s.f();
| ^

我的问题是为什么会出现此错误以及如何解决。

最佳答案

当编译器命中这部分代码时:

S s;
s.f();

它所看到的只是 header header.h 的内容。如果我们在那里查看,我们可以看到编译器只会查看:

struct S 
{
auto f();
};

如何从中知道 f 的返回类型?答案是,不能。因此,您需要使 f 的定义在使用它的地方 可用。这意味着你需要把它放在头文件中:

struct S 
{
auto f() {
return 4;
}
};
/// or
inline auto S::f() { return 4; }

或者更好的是,不要在这里滥用 autoauto 在必须推导类型时很有用,因为它取决于模板参数或类似参数。在您的情况下,类型定义得很好,因此如果您只是使用它,对用户来说会更容易:

struct S {
int f();
}

关于c++ - 使用 auto 作为函数返回类型时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71671194/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com