首页 > 其他 > 详细

类成员函数指针使用时编译报错error2440

时间:2021-09-02 14:45:18      阅读:6      评论:0      收藏:0      [点我收藏+]
成员函数指针可能是经常使用的,在一个使用过程中发现在一种情况下,windows和linux的编译处理不同。
一般情况下的使用如下:
class BaseA
{
public:
    virtual ~BaseA() {}

    void funcBaseA(int v) { cout << "funcBaseA : " << v << " : " << m_ba << endl;}
private:
    int m_ba{1};
};

class DerivedA : public BaseA
{
public:
    void funcA(int v) { cout << "funcA : " << v << " : " << m_da << endl; }
private:
    int m_da{3};
};

测试:

    typedef void (BaseA::*pFuncA)(int);

    BaseA* ta = new DerivedA;

    pFuncA pfa1 = reinterpret_cast<pFuncA>(&BaseA::funcBaseA);
    pFuncA pfa2 = reinterpret_cast<pFuncA>(&DerivedA::funcA);
    (ta->*pfa1)(1);
    (ta->*pfa2)(2);
这个是正常的,在两个平台下表现一致。
增加以下代码:
class BaseB
{
public:
    virtual ~BaseB() {}

    void funcBaseB(int v) { cout << "funcBaseB : " << v << " : " << m_bb << endl;}
private:
    int m_bb{2};
};

class DerivedB : public BaseA, public BaseB
{
public:
    void funcB(int v) { cout << "funcB : " << v << " : " << m_db << endl; }
private:
    int m_db{4};
    int m_da{5};
};

测试: pFuncA pfa3 = reinterpret_cast<pFuncA>(&DerivedB::funcB); BaseA* tb = new DerivedB; (tb->*pfa1)(3); (tb->*pfa3)(4); //(tb->*pfa2)(5);
此时在linux下编译正常,但在windows下编译器报错无法转换,必须使用强制转换才能通过。

类成员函数指针使用时编译报错error2440

原文:https://www.cnblogs.com/nuoforever/p/15217164.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!