博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Argument of type '(Foo::)(int,int)' does not match 'void (*)(int,int)'以及静态函数问题
阅读量:2440 次
发布时间:2019-05-10

本文共 1964 字,大约阅读时间需要 6 分钟。

      今天在封装DTL函数的时候,遇到了这个错误: error: argument of type ‘void (EH_Database::)(ParamObjExample&)’ does not match ‘void (*)()’  也就是我的成员函数,与普通的调用函数指针不匹配。

      封装一个delete函数,目的是提供字符串在数据库中查找删除。而字符串,需要用

SetParamsExample(ParamObjExample& params);
函数对参数进行设置,并进行关联。

      最初的解决方案为,将SetParamsExample()函数设置为全局函数,类中添加静态静态成员:

static string m_strDelete;
并初始化为空字符串:

string EH_Database::m_strDelete="";
设置参数过程改为如下:

void EH_Database::SetParamsExample(ParamObjExample& params) {	// set parameter values	params.lowIntValue = INT_MAX;	params.highIntValue = INT_MAX;	params.strValue = EH_Database::m_strDelete;}
     最初的考虑是,如果设置参数,不需要定义个类对象,于是用了static方法。成功实现参数传递

     然后将函数SetPararamsExample封装到类中,并去掉静态成员,在构造函数中初始化m_strDelete为空,Set中语句为:

params.strValue = m_strDelete;
     得到错误如题,C++的普通函数指针没发直接调用类成员函数,怎搞? 提到可以将函数设置为static,试之,成功。

     成品如下:

类中:

public:	static void  SetParamsExample(ParamObjExample& params);	static string m_strDelete;
set函数中

void EH_Database::SetParamsExample(ParamObjExample& params) {	params.lowIntValue = 2;	params.highIntValue = INT_MAX;	params.strValue = m_strDelete;}
初始化成员:

string EH_Database::m_strDelete="";
delete函数中:

void Delete(string toDelete, string table = "example");//以上为.h声明,提供默认参数void EH_Database::Delete(string toDelete, string table) {	m_strDelete = toDelete;    typedef DBView
DBV; DBV view(table, BCAExample(), "WHERE INT_VALUE BETWEEN (?) AND (?) OR " "STRING_VALUE = (?) ORDER BY INT_VALUE", BPAExampleObj()); IndexedDBView
indexed_view( view, "UNIQUE PrimaryIndex; STRING_VALUE; " "AlternateIndex; INT_VALUE", BOUND, USE_ALL_FIELDS, cb_ptr_fun(SetParamsExample)); IndexedDBView
::iterator idxview_it = indexed_view.begin(); IndexedDBView
::iterator deleteMe = idxview_it; idxview_it++; indexed_view.erase(deleteMe);}
  
    感觉上,加上static后,用起来还是和全局函数类似,只是放到了类里面而已,而静态函数又只能掉静态成员,所以如同下面网址
      13楼的说法:静态函数一般也就是用在封装一些常用的、通用的、与类相关但又与实例无关的成员函数。
这个总结也还不错,就是稍贵,看看也还行。

       OK,写了个类,封装了插入删除,今天的成果,菜鸟go  go go  ~~~

转载地址:http://nlcqb.baihongyu.com/

你可能感兴趣的文章
angular id标记_使用传单在Angular中构建地图,第2部分:标记服务
查看>>
命令行基础知识:使用ImageMagick调整图像大小
查看>>
通过Angular,Travis CI和Firebase托管进行连续部署
查看>>
debian docker_如何在Debian 10上安装和使用Docker
查看>>
python pyenv_如何使用Pyenv和Direnv管理Python
查看>>
react 实现滚动加载_如何在React中实现平滑滚动
查看>>
报纸打字项目_如何使用打字稿设置节点项目
查看>>
如何在Debian 10上安装Docker Compose
查看>>
prisma orm_Prisma中的身份验证-第2部分:JSON Web令牌和登录
查看>>
centos cron_如何在CentOS 8上使用Cron自动化任务
查看>>
V8的V8:JavaScript中的可选链接和无效合并
查看>>
如何在JavaScript中使用map(),filter()和reduce()
查看>>
react hooks使用_使用Hooks动态加载React组件
查看>>
bat命令行遍历文件_命令行基础知识:如何遍历目录中的文件
查看>>
了解编程中的操作顺序
查看>>
react中创建一个组件_如何在React中创建社交关注组件
查看>>
DigitalOcean的技术写作指南
查看>>
配置管理规范 配置管理计划_配置管理简介
查看>>
如何在Ubuntu 18.04上添加和删除用户
查看>>
angular4前后端分离_如何在Angular 4+中使用Apollo客户端GraphQL
查看>>