码迷,mamicode.com
首页 > 编程语言 > 详细

C++的那些坑儿

时间:2018-10-04 10:15:20      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:lock   分割线   方案   无法   记录   分析   val   多少   避免   

这篇文章是用于记录博主在折腾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;
};

C++的那些坑儿

标签:lock   分割线   方案   无法   记录   分析   val   多少   避免   

原文地址:https://www.cnblogs.com/wsmrzx/p/9740971.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!