qq_33796078 2021-04-20 10:22 采纳率: 0%
浏览 10

关于模板参数使用的代码问题

#include <iostream>
using namespace std;

class Tv
{
public:
    static void onBtnClicked(bool b)
    {
        if(b==true)
            cout<<"on"<<endl;
        else
            cout<<"off"<<endl;
    }
    Tv(int a,int b):a(a),b(b){}
    const int getA(void){return a;}
private:
    int a;
    int b;
};

class lamp
{
   public:
    static void onBtnClicked(bool b)
    {
        if(b==true)
            cout<<"on"<<endl;
        else
            cout<<"off"<<endl;
    }
    lamp(int a,int b):a(a),b(b){}
    const int getA(void){return a;}
private:
    int a;
    int b;
};

template <typename Tobject, typename Tpara>
class Button
{
    typedef void (Tobject::*pFuction)(Tpara);
public:
    Button(Tobject* obj, pFuction pf)
    {
        m_obj=obj;
        m_pf=pf;
    }
    void click(Tpara b)
    {
        (m_obj->*m_pf)(b);
    }
private:
    Tobject* m_obj;
    pFuction m_pf;
};

int main()
{
    Tv a(20,40);
    Button<Tv,bool> btn(&a, &Tv::onBtnClicked);//无法初始化类
    btn.click(true);
    return 0;
}

类模板初始化错误,能指正下吗?

  • 写回答

2条回答 默认 最新

  • qq_33796078 2021-04-20 11:50
    关注

    error:no known conversion for argument 2 from 'void (*)(bool)' to 'Button<Tv, bool>::pFuction' {aka 'void (Tv::*)(bool)'}

    静态成员函数被编译器当做全局函数处理,非静态成员函数也做普通函数处理,只不过在参数列表中多加了一个this参数。因而,函数指针指向错误,参数不匹配

    评论

报告相同问题?

悬赏问题

  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 路易威登官网 里边的参数逆向
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程