如何将头文件中具有自动返回类型的函数包含到多个cpp文件中

Bl4*_*C4t 4 c++ lambda header include-guards auto

我想以这样的方式定义一个自动返回类型的函数,如果包含标头,我可以从多个 .cpp 文件中调用它。我有4个文件

\n

head.hpp- 函数在哪里

\n
#ifndef HEAD_HPP\n#define HEAD_HPP \n\nauto f();\n\n#endif\n
Run Code Online (Sandbox Code Playgroud)\n

head.cpp- 函数声明的位置

\n
#include "head.hpp"\n\nauto f(){\n    return [](){\n        return 10;\n    };\n}\n
Run Code Online (Sandbox Code Playgroud)\n

test1.cpp- 使用地点

\n
#include "head.hpp"\nint foo(){\n    auto func = f();\n    return f();\n}\n
Run Code Online (Sandbox Code Playgroud)\n

main.cpp- 也用在哪里

\n
\n#include "head.hpp"\nint foo();\nint main(){\n    auto fu = f();\n\n    return fu() + 5 + foo();\n}\n
Run Code Online (Sandbox Code Playgroud)\n

所有文件都编译在一起\n我仍然收到错误:

\n
\n

错误:在扣除 \xe2\x80\x98auto\xe2\x80\x99 之前使用 \xe2\x80\x98auto f()\xe2\x80\x99

\n
\n
\n

自动 fu = f();

\n
\n

Sam*_*hik 7

不幸的是,C++ 不是这样工作的。

当您在 C++ 中调用函数时:

auto fu=f();
Run Code Online (Sandbox Code Playgroud)

编译器必须知道函数实际返回的离散类型。auto不是真实类型。它只是稍后要弄清楚的类型的占位符。

但这个“以后”永远不会到来。如果编译器看到的只是auto返回类型,则编译器无法确定函数的实际返回类型,因此程序格式不正确,并且会出现编译错误。

这是 C++ 的一个基本方面,没有解决方法。

  • 不,您需要在头文件中声明函数实际返回的内容。在 C++ 中,每个函数始终返回相同的类型。在头文件中这样声明它。这个返回一个不带参数的 lambda,并返回一个“int”。在这种情况下,在头文件中声明 `std::function<int ()> f()` (当然包括 `<function>`,并在其 `.cpp` 文件中定义相同的内容)就足够了。此外,在这种非常特殊的情况下,返回普通函数指针也可以工作。 (3认同)