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

时间:2016-01-12 11:49:54

标签: c++ function pointers static

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

//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”而是另一个文件...... 是否有可能以这种方式指向静态函数?我做错了吗?

1 个答案:

答案 0 :(得分:1)

根据您发布的代码,我认为您需要声明该类:

class CDatabase
{
public:
  static void getDatabaseInteger(DatabaseRow& details);

  //other functions
};

相同的头文件中引用CDatabase::getDatabaseInteger()方法的所有数组之前

。在您的头文件中看起来像是在实际声明它之前引用静态函数。将此声明移动到文件的开头。