默认形参重定义问题

问题描述:

复习时遇到这样一道题,函数在声明时已经输入了默认形参,在定义时是否需要再次输入。题目如图
开始选择试试B,答案为D。自己在VS2019试验了一下。代码如下

#include<iostream>
using namespace std;
int g_num = 0;
class A 
{
public :
	void setx(int a = 0);
private:
	int x;
};
void A::setx(int a = 0)
{
	x = a;
}
void main() {
	A a;
	a.setx(1);
}

报错
显示错误如图


原因分析:

查找资料得知:当debug时遇到这个错误C2572: “XXXX”: 重定义默认参数,往往是因为在函数的声明和定义中同时给参数设定了默认值。想修改这个错误,你只需将函数的定义中的形参默认值部分删除即可。(注:不是删除形参,而是删除默认值部分)。
那么删除声明中的默认形参是否可行?代码如下

#include<iostream>
using namespace std;
int g_num = 0;
class A 
{
public :
	void setx(int a);
private:
	int x;
};
void A::setx(int a = 0)
{
	x = a;
}
void main() {
	A a;
	a.setx(1);
}

试验也是可行的


转载自:

https://blog.csdn.net/u013921430/article/details/83025434?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162527781916780357273868%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162527781916780357273868&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-2-83025434.pc_search_result_control_group&utm_term=%E9%87%8D%E5%AE%9A%E4%B9%89%E9%BB%98%E8%AE%A4%E5%8F%82%E6%95%B0&spm=1018.2226.3001.4187

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值