错误C2065,函数指针指向静态成员类

Error C2065 with function pointer to static member class

本文关键字:静态 静态成员 成员类 指针 C2065 函数 错误      更新时间:2023-10-16

我正在尝试更改头类中静态常量结构的现有代码,该结构用作创建数据库的基础。当前代码为

//database.h
#define VIDEODB_TYPE_INT 1
const struct DBHeaders
{
  std::string name;
  std::string dbType;
  int type;
} DBHeadersTable1[] = 
{
  { "idRow", "INTEGER PRIMARY KEY", VIDEODB_TYPE_INT},
  { "value", "INTEGER", VIDEODB_TYPE_INT}
};
const struct DBHeaders DBHeadersTable2[] = 
{
  { "idRow", "INTEGER PRIMARY KEY", VIDEODB_TYPE_INT},
  { "value", "INTEGER", VIDEODB_TYPE_INT}
};
class CDatabase
{
public:
  void getDatabaseInteger(DatabaseRow& details);
  void get(int column, DBHeaders headers, DatabaseRow& details)
  {
    if (headers[i].type == VIDEODB_TYPE_INT)
      getDatabaseInteger(details);
  }
  //other functions
}

但这种方法已经不太好了,因为现在我们有一些字段需要更改才能使用。因此,我不想给出一个表示函数的数字,而是想直接插入一个指向函数的指针,这样可以获得更大的灵活性。这是我的新代码

//database.h
typedef void (*getFunctionType)(DatabaseRow&);
const struct DBHeaders
{
  std::string name;
  std::string dbType;
  getFunctionType getFunction;
} DBHeadersTable1[] = 
{
  { "idRow", "INTEGER PRIMARY KEY", &(CDatabase::getDatabaseInteger)},
  { "value", "INTEGER", &(CDatabase::getDatabaseInteger)}
};
const struct DBHeaders DBHeadersTable2[] = 
{
  { "idRow", "INTEGER PRIMARY KEY", &(CDatabase::getDatabaseInteger)},
  { "value", "INTEGER", &(CDatabase::getDatabaseInteger)}
};
class CDatabase
{
public:
  static void getDatabaseInteger(DatabaseRow& details);
  //other functions
}

其想法是,为我的行定义一个const,并为代码解析列所必须使用的函数提供一个指针。我得到的错误是:https://msdn.microsoft.com/en-us/library/ewcf0002.aspx在线

  { "idRow", "INTEGER PRIMARY KEY", &(CDatabase::getDatabaseInteger)},

在错误的括号之间,我没有"database.h",而是另一个文件。。。有可能用这种方式指向一个静态函数吗?我做错什么了吗?

根据您发布的代码,在我看来您需要声明类:

class CDatabase
{
public:
  static void getDatabaseInteger(DatabaseRow& details);
  //other functions
};

中引用CDatabase::getDatabaseInteger()方法的所有数组之前,返回相同的头文件。在头文件中,您似乎在实际声明静态函数之前引用了它。请将此声明移到文件的开头。