我正在尝试更改我的头类中的静态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”而是另一个文件...... 是否有可能以这种方式指向静态函数?我做错了吗?
答案 0 :(得分:1)
根据您发布的代码,我认为您需要声明该类:
class CDatabase
{
public:
static void getDatabaseInteger(DatabaseRow& details);
//other functions
};
在相同的头文件中引用CDatabase::getDatabaseInteger()
方法的所有数组之前
。在您的头文件中看起来像是在实际声明它之前引用静态函数。将此声明移动到文件的开头。