C++编译报no return statement in function returning non void问题咨询
问题解答
错误成因
C++语法有明确规定:如果函数声明时指定的返回值类型不是void,则该函数所有可能的执行路径结束时,都必须通过return语句返回对应类型的有效值,否则就会触发你遇到的no return statement in function returning non void [-Wreturn-type]报错。
你代码里两个对应报错位置的问题分别是:
- 第40行对应
int Task(int balance, int balance2, int option)函数:你声明了返回值为int类型,但整个函数执行完switch分支逻辑后,没有任何return语句返回int值。 - 第64行对应
int main1()函数:你声明了返回值为int类型,函数执行完循环逻辑后也没有return语句返回int值,另外C++规定程序的唯一合法入口是int main(),你写的main1无法作为入口被系统识别,属于额外的逻辑错误。
修复方案
- 处理Task函数的返回值问题:
如果你不需要Task返回任何执行结果,直接把函数声明的返回值类型从int改为void即可,修改后不需要补充return语句。
如果你需要把修改后的账户余额返回给调用方,就在Task函数的末尾添加return balance;,同时在main函数调用Task时接收返回值更新本地存储的余额变量(你当前按值传参的写法修改的只是Task内的形参,不会影响外部的余额值,属于隐藏逻辑bug)。 - 处理主函数问题:
把int main1()改为标准入口函数int main(),并在函数最后一行添加return 0;表示程序正常执行结束。 - 其他可修复的逻辑问题(避免编译通过后运行异常):
- 你代码里的
Account1、Account2是未初始化的int变量,判断x == Account1的逻辑完全不生效,可以改为判断输入的x是字符'1'还是'2'来选择对应账户。 - Task函数内的
cin >> option;会覆盖你从main传入的option值,属于多余逻辑,可以直接删除。 - 你当前调用Task时传入的是固定常量500、700,每次调用都会重置余额,建议在main内定义变量存储两个账户的余额,每次调用Task后更新对应变量的值。
内容的提问来源于stack exchange,提问作者KarmaBoiii
相关产品推荐
相关产品推荐

