C++ C++;导出的返回类型在定义之前不能使用
计算器.hC++ 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
类计算器{
计算器();
样板
静态自动添加(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添加了更多解释。