C++ C++;导出的返回类型在定义之前不能使用

C++ C++;导出的返回类型在定义之前不能使用,c++,types,c++17,C++,Types,C++17,计算器.h 类计算器{ 计算器(); 样板 静态自动添加(Args…Args); }; 计算器 #包括“Calculator.h” 计算器::计算器(){} 样板 自动计算器::添加(Args…Args){ 返回值(args+…+0); } main.cpp #包括 #包括“Calculator.h” int main(){ 计算器; 标准::cout 我错过了什么 错误消息解释了这一点:您试图在定义函数之前使用推导的返回类型。这是不允许的1.为了澄清,您在main中调用了函数Calcula

计算器.h

类计算器{
计算器();
样板
静态自动添加(Args…Args);
};
计算器

#包括“Calculator.h”
计算器::计算器(){}
样板
自动计算器::添加(Args…Args){
返回值(args+…+0);
}
main.cpp

#包括
#包括“Calculator.h”
int main(){
计算器;
标准::cout
我错过了什么

错误消息解释了这一点:您试图在定义函数之前使用推导的返回类型。这是不允许的1.为了澄清,您在
main
中调用了函数
Calculator::add
,但函数
Calculator::add
在函数调用之前没有在同一翻译单元中定义。事实上,它不是t定义在同一个翻译单元中

您需要:

  • 在调用函数之前定义函数,这是在标头中定义函数时所做的操作
  • 或者在没有自动推断的情况下显式声明返回类型……但是,如果使用此方法,示例程序中还有另一个不相关但类似的问题:模板通常无法在定义之前实例化。1.此方法也解决了此问题
  • 1这是不允许的,因为返回类型是根据函数定义中的返回语句推导出来的。如果没有函数定义,则编译器无法确定返回类型

    我错过了什么

    错误消息解释了这一点:您试图在定义函数之前使用推导的返回类型。这是不允许的1.为了澄清,您在
    main
    中调用了函数
    Calculator::add
    ,但函数
    Calculator::add
    在函数调用之前没有在同一翻译单元中定义。事实上,它不是t定义在同一个翻译单元中

    您需要:

  • 在调用函数之前定义函数,这是在标头中定义函数时所做的操作
  • 或者在没有自动推断的情况下显式声明返回类型……但是,如果使用此方法,示例程序中还有另一个不相关但类似的问题:模板通常无法在定义之前实例化。1.此方法也解决了此问题

  • 1这是不允许的,因为返回类型是根据函数定义中的返回语句推导出来的。如果没有函数定义,则编译器无法计算返回类型。

    auto
    需要定义…main.cpp没有它。在main.cpp中,您需要知道
    cal的类型.add(1,2,3)
    是。您如何确定这一点?@Mat:同样的问题(但确实是同样的解决方案)对于返回类型为
    auto
    的非模板函数。@Mat感谢您共享此链接。与
    auto
    中提到的@Jarod42一样的问题需要定义…main.cpp没有定义。在main.cpp中,您需要知道
    cal.add(1,2,3)
    的类型。您如何确定它?@Mat:同样的问题(但确实是相同的解决方案)用于返回类型为
    auto
    的非模板函数。@Mat感谢共享该链接。类似于@Jarod42提到的问题。您能解释一下他在定义之前是如何使用它的吗?@0x499602D2添加了更多解释。您能解释一下他在定义之前是如何使用它的吗?@0x499602D2添加了更多解释。