错误C2065,函数指针指向静态成员类
Error C2065 with function pointer to static member class
我正在尝试更改头类中静态常量结构的现有代码,该结构用作创建数据库的基础。当前代码为
//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()
方法的所有数组之前,返回相同的头文件。在头文件中,您似乎在实际声明静态函数之前引用了它。请将此声明移到文件的开头。
相关文章:
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 将公共但非静态的成员函数与ALGLIB集成
- 私有类型的静态常量成员
- 添加静态constexpr成员是否会更改结构/类的内存映射
- 静态数据成员模板专用化的实例化点在哪里
- 枚举成员与静态 int 成员?
- C++ 模板类型的静态 lambda 成员的构造
- 调用在 HXX 文件中声明的静态数据成员
- 初始化模板化类中的静态 constexpr 成员
- (为什么)我们可以在初始化中将非静态类成员分配给静态变量吗?
- 静态 constexpr 成员变量初始化
- 虚拟成员函数的定义是否强制在同一转换单元中动态初始化静态数据成员?
- 错误: 无效使用非静态数据成员"应用程序::应用程序构造函数"
- 将 C# 对象(包含静态对象成员)作为参数传递给 C++/CLI 程序
- 静态数据成员:它"const declaration / constexpr definition"起作用?
- C++ - 非静态 void* 成员,指向具有相同地址但不同值的不同对象的另一个非静态成员
- c++ 是否保证标头初始化的静态 const 成员跨编译单元和库共享单个实例?
- 使用静态 constexpr 成员的未解析外部符号
- 何时需要定义类的静态数据成员 (un/-)
- 无法使用 strcpy 将字符串复制到静态结构成员