【C++】 error C2572: 重定义默认参数 |
您所在的位置:网站首页 › cj2312参数 › 【C++】 error C2572: 重定义默认参数 |
【fishing-pan:https://blog.csdn.net/u013921430转载请注明出处】 前言 当debug时遇到这个错误C2572: “XXXX”: 重定义默认参数,往往是因为在函数的声明和定义中同时给参数设定了默认值。想修改这个错误,你只需将函数的定义中的形参默认值部分删除即可。(注:不是删除形参,而是删除默认值部分)例如以下这种情况,编译器就会报错; Student(int a , char *n = "default name"); //函数声明 Student::Student(int a, char *n = "default name" ) //函数定义 { /*函数实现*/ }修改后的代码如下;这样程序就能正常运行了。 Student(int a , char *n = "default name"); //函数声明 Student::Student(int a, char *n ) //函数定义 { /*函数实现*/ } 问题分析这个错误并不是什么大问题,因为在写代码的过程中,为了省事,大家都会习惯性的把函数的声明直接粘贴到函数的定义处。至于说为什么不能在函数的声明和定义处同时给形参以默认值,我查阅了一些书籍都没有给出明确的解释。大家只需记住即可。(OS:这根本就不算分析好吗?) 我又好奇的想了一下,能不能在函数的声明中不给予形参默认值,而在定义中给予默认值呢?所以我又试了一下。测试是在VS2013下进行的。测试结果是也可以运行。但是我又在另一种情况下进行了测试,发现无法运行。下面这种情况中就不可以,因为main() 函数调用func() 函数时,根据函数声明,形参并没有默认值,所以调用函数时,不能使用缺省的参数值。 int func(int a); void main() { int aa = func(5); int bb = func(); //报错 cout |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |