设为首页收藏本站

八达网

 找回密码
 注册
查看: 790|回复: 21
打印 上一主题 下一主题

问个C++的问题

[复制链接]

2246

主题

12

好友

2万

积分

管理员

Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

战队
种族
Protoss

2013年度八达十大水友 2012年度八达十大水友 2011年度八达十大水友

跳转到指定楼层
1
发表于 2013-9-1 10:38 |只看该作者 |倒序浏览
有个sqlite类的函数有个回调函数
声明是这么写的
SQLITE_API int sqlite3_exec(
  sqlite3*,                                  /* An open database */
  const char *sql,                           /* SQL to be evaluated */
  int (*callback)(void*,int,char**,char**),  /* Callback function */
  void *,                                    /* 1st argument to callback */
  char **errmsg                              /* Error msg written here */
);

其中第三个参数就是一个回调函数
我申明了一个方法是这样的:int QuoridorAI::loadRecord( void * para, int n_column, char ** column_value, char ** column_name)
QuoridorAI为类名

我调用sqlite函数的方法是这样的:
result = sqlite3_exec( db, sql->getCString(),loadRecord, &count, &errMsg );
这样调用编译不过。。。怎么破

错误提示:
        2        IntelliSense: "int (QuoridorAI::*)(void *para, int n_column, char **column_value, char **column_name)" 类型的实参与 "int (*)(void *, int, char **, char **)" 类型的形参不兼容        d:\cocos2d-x-2.1.5\quoridor\proj.win32\quoridorai.cpp        64        51        Quoridor.win32

如果我把我自己申明的方法中QuoridorAI::去掉,那么这个回调函数里就没法访问QuoridorAI的变量
非常闹心啊
1

查看全部评分

10

主题

0

好友

2万

积分

大和

2
发表于 2013-9-1 13:10 |只看该作者
loadRecord 设置为静态函数试试
国建身价大于5毛
回复

使用道具 举报

23

主题

0

好友

4万

积分

大和

3
发表于 2013-9-1 13:57 |只看该作者
废话,loadRecord是个成员函数,你这样能编译过才怪
你得先定义一个对象QuoridorAI *qa = new QuoridorAI(); 传qa->loadRecord(...)进去
回复

使用道具 举报

80

主题

0

好友

3万

积分

大和

4
发表于 2013-9-1 14:00 |只看该作者
8da真他妈牛人多,操
回复

使用道具 举报

my8dacart 该用户已被删除
5
发表于 2013-9-1 14:27 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

120

主题

19

好友

1万

积分

航母

6
发表于 2013-9-1 15:36 |只看该作者
C++成员函数要看具体编译器的实现方法,大多都是基于vtable
正解是用使用static函数。
回复

使用道具 举报

10

主题

0

好友

2万

积分

大和

7
发表于 2013-9-1 16:13 |只看该作者
直接召唤木天使好么
国建身价大于5毛
回复

使用道具 举报

23

主题

0

好友

4万

积分

大和

8
发表于 2013-9-1 16:28 |只看该作者
牛clear 发表于 2013-9-1 15:36
C++成员函数要看具体编译器的实现方法,大多都是基于vtable
正解是用使用static函数。

草,先去baidu一下什么是vtable好吗?
回复

使用道具 举报

13

主题

1

好友

1001

积分

龙骑士

9
发表于 2013-9-1 16:31 |只看该作者
。。。。。。。。。。。。。。。。
8da藏龙卧虎,我在想是不是去应聘个程序员的岗位,然后把每日工作发到8da来,月入2W+
回复

使用道具 举报

10

主题

0

好友

2万

积分

大和

10
发表于 2013-9-1 16:33 |只看该作者
lz调用的时候直接调用成员函数应该是笔误吧
国建身价大于5毛
回复

使用道具 举报

372

主题

1

好友

3万

积分

大和

我自横刀向天笑,笑完我就去睡觉.睡醒我就拿起刀,再次横刀向天

战队
Linyu)
联赛ID
[ReD]NaDa
种族
Terran
11
发表于 2013-9-1 16:53 |只看该作者
8da真他妈牛人多,操
回复

使用道具 举报

21

主题

0

好友

3万

积分

大和

牛奶浪人★淏

战队
[B.D]=
种族
Protoss
12
发表于 2013-9-1 16:54 |只看该作者
SQLITE_API int sqlite3_exec(
  sqlite3*,                                  /* An open database */
  const char *sql,                           /* SQL to be evaluated */
  int (*callback)(void*,int,char**,char**),  /* Callback function */
  void *,                                    /* 1st argument to callback */
  char **errmsg                              /* Error msg written here */
);

int QuoridorAI::loadRecord( void * para, int n_column, char ** column_value, char ** column_name)

//result = sqlite3_exec( db, sql->getCString(),loadRecord, &count, &errMsg );

呵呵,编译器的提示是对的。

QuoridorAI ai;
sqlite3_exec(db,sql->getCString(),std::bind(&QuoridorAI::loadRecord,&ai),
        &count, &errMsg);


或者你是在QuoridorAI类里面的话,可以这么调用
sqlite3_exec(db,sql->getCString(),std::bind(&QuoridorAI::loadRecord,this),
        &count, &errMsg);

回复

使用道具 举报

738

主题

0

好友

2万

积分

大和

8da熊蜜工作领导小组长

13
发表于 2013-9-1 16:56 来自手机 |只看该作者
C++当年哥也会啊
回复

使用道具 举报

4

主题

0

好友

73

积分

农民

14
发表于 2013-9-1 17:14 |只看该作者
当哥说说在做啥游戏啊,这是cocos哈哈
回复

使用道具 举报

424

主题

5

好友

3078

积分

飞龙

15
发表于 2013-9-1 17:15 |只看该作者
牛clear 发表于 2013-9-1 15:36
C++成员函数要看具体编译器的实现方法,大多都是基于vtable
正解是用使用static函数。

vtable是分析多态才用到的概念吧  和楼主说的好像没啥关系
回复

使用道具 举报

又打出gg了 该用户已被删除
16
发表于 2013-9-1 17:19 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

120

主题

19

好友

1万

积分

航母

17
发表于 2013-9-1 18:24 |只看该作者
Neutrino 发表于 2013-9-1 16:28
草,先去baidu一下什么是vtable好吗?

装逼被破,尴尬。
回复

使用道具 举报

120

主题

19

好友

1万

积分

航母

18
发表于 2013-9-1 18:26 |只看该作者
刁总书记 发表于 2013-9-1 17:15
vtable是分析多态才用到的概念吧  和楼主说的好像没啥关系

哈哈,戳穿了
回复

使用道具 举报

10

主题

0

好友

8838

积分

大象

19
发表于 2013-9-1 19:43 |只看该作者
本屌只会C语言,但是本屌的程序是控制机器人的
回复

使用道具 举报

143

主题

1

好友

2万

积分

大和

20
发表于 2013-9-1 20:58 |只看该作者
CPP在企业应用软件行业里已死。太难学难精了。
回复

使用道具 举报

2

主题

0

好友

7471

积分

大象

21
发表于 2013-9-1 22:36 |只看该作者
this...
回复

使用道具 举报

376

主题

8

好友

7万

积分

仲裁者

DON'T PANIC

22
发表于 2013-9-1 23:23 |只看该作者
能和各位精英一个论坛 真是荣幸   
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

手机版|Archiver|八达网    

GMT+8, 2025-11-28 01:01

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部