版权声明:本博客属于个人维护博客,未经博主允许不得转载其中文章。 https://blog.csdn.net/wsmrzx/article/details/82934139
这篇文章是用于记录博主在折腾C++过程中踩过的坑,现在记录下来和大家分享分享,避免大家重蹈覆辙哦 _
测试环境:Vitual Studio 2017
------------------------------------------------------------这是一条优雅的分割线------------------------------------------------------------
1. error C2648
测试代码:
class Class
{
public:
void func(int num = value) {}
private:
int value;
};
错误提示:
error C2648: “Class::value”: 将成员作为默认参数使用要求静态成员
note: 参见“Class::value”的声明
原因分析:
C++标准中不允许使用非静态数据成员作为成员函数的默认参数,原因是当编译器进行编译时,如果非静态成员在成员函数被调用之前没有被初始化,则编译器无法确定参数的默认值是多少
解决方案:
方案一:将默认参数改成一个废弃值,再在函数中进行判断修正
class Class
{
public:
void func(int num = INT_MIN)
{
if (num == INT_MIN)
num = value;
//...
}
private:
int value;
};
方案二:重载函数
class Class
{
public:
void func(int num) {/*这里使用用户传入的参数*/}
void func() {/*这里相当于使用默认参数,可以认为传入的参数为value*/}
private:
int value;
};