C++的那些坑儿

版权声明:本博客属于个人维护博客,未经博主允许不得转载其中文章。 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;
};

猜你喜欢

转载自blog.csdn.net/wsmrzx/article/details/82934139
今日推荐