QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1473|回复: 6

static成员函数,为什么会出错???求助

[复制链接]
发表于 2005-4-21 18:15:21 | 显示全部楼层 |阅读模式
----------------make 错误如下-------------------
[root@localhost sqlite-qt]# make
g++ -c -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -DNO_DEBUG -I/qt/x86-qtopia/qt/include -o sqlite-qt.o sqlite-qt.cpp
In file included from sqlite-qt.cpp:10:
sqlite-qt-query.cpp:30: cannot declare member function `static int
   SqliteQuery::callback(void*, int, char**, char**)' to have static linkage
sqlite-qt-query.cpp: In function `static int SqliteQuery::callback(void*, int,
   char**, char**)':
sqlite-qt-query.cpp:30: warning: unused parameter `void*NotUsed'
make: *** [sqlite-qt.o] Error 1
[root@localhost sqlite-qt]#
------------------------------关键代码-------------------

。。。。。。。。。。。。。。
#include "sqlite-qt-query.h"

SqliteQuery::SqliteQuery(char *database)
{
  *dbName=*database;
}

void SqliteQuery::query(char *queryStatament)
{
  sqlite3 *db;
  char *zErrMsg = 0;
  int rc;
            
  rc = sqlite3_open(dbName, &db);
  if( rc ){
    fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
    sqlite3_close(db);

     return;
  }
  rc = sqlite3_exec(db, queryStatament, callback, 0, &zErrMsg);//这行有调用callback
  if( rc!=SQLITE_OK ){
    fprintf(stderr, "SQL error: %s\n", zErrMsg);
  }
  sqlite3_close(db);
}

static int SqliteQuery::callback(void *NotUsed, int argc, char **argv, char  **azColName)        //这行,static callback的实现
{
  int i;
  for(i=0; i<argc; i++)
  {
          printf("%s = %s\n", azColName, argv ? argv : "NULL");
  }
  printf("\n");
  return 0;
}
。。。。。。。。。。。。。。。。
       
发表于 2005-4-22 00:02:40 | 显示全部楼层
把static去掉试试,类成员函数声明时用static,实现时,不需要。
回复

使用道具 举报

 楼主| 发表于 2005-4-22 12:18:21 | 显示全部楼层
谢谢,楼上的大哥

那个问题解决了

不过,又遇到新问题,,
运行“段错误“
------------------------------
。。。。。
text = deliver project description
priority = 10

text = lunch with Christine
priority = 100

段错误
[root@localhost sqlite-qt]#
----------------------------------
还有,,在静态成员函数中,不能调用类的公共成员变量吗?
例如,下面,我注释掉的,成员变量
-------------------------------类中定义---------------------------
class SqliteQuery
{
public:
        SqliteQuery();
        SqliteQuery(char* dbname);
        static int callback(void *NotUsed, int argc, char **argv, char **azColName);
        void query(char* queryStatament);
       
        char *dbName;
        char *name;               
        char *value;
};
--------------------在静态成员函数中,调用----------------------------
int SqliteQuery::callback(void *NotUsed, int argc, char **argv, char **azColName)
{
  int i;
  for(i=0; i<argc; i++)
  {
          printf("%s = %s\n", azColName, argv ? argv : "NULL");               
                       
//        name=azColName;                //不注释掉                               
//        value=argv;                        //编译就通不过
  }
  printf("\n");
  return 0;
}

---------------------------
请大哥,指点一下,什么原因引会起错误?
上面的,关于变量调用的问题,如何解决啊?

盼,尽快回复
回复

使用道具 举报

发表于 2005-4-22 13:38:23 | 显示全部楼层
静态成员函数,你可以想像它是一个全局函数,仅仅是名义上隶属于类。它在类被对象化之前就存在了,而类成员变量只有将类对象化后才有意义。所以静态成员函数不能取到类成员变量
回复

使用道具 举报

 楼主| 发表于 2005-4-23 09:26:03 | 显示全部楼层
那我想在静态成员函数里,,保存变量值怎么办??

比如上面的,azColName argv
我的目的,就是得到它们,并在其它类创的控件中显示它们的值,或存储到数据库中?

我该怎么写啊??

因为,rc = sqlite3_exec(db, queryStatament, callback, 0, &zErrMsg);//这行有调用callback
中的sqlite3_exec(),的函数类型,好像就要求callback静态的,,所以callback我又不能用其它类型写,,就产生上的问题了。

小弟,初用C++,还请指点
回复

使用道具 举报

发表于 2005-4-23 14:34:49 | 显示全部楼层
linux中的程序设计我不懂,几天前才决定向linux靠拢。

至于你说的C++中的类成员变量的问题,你可以使用静态变量的。
回复

使用道具 举报

 楼主| 发表于 2005-4-24 10:43:22 | 显示全部楼层
还是非常感谢大哥的帮助,,有C++的问题,再问你哈
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-6 07:41 , Processed in 0.059961 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表