问题描述:
复习时遇到这样一道题,函数在声明时已经输入了默认形参,在定义时是否需要再次输入。
开始选择试试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