[英]C++ Array of Functions
我正在尝试处理函数数组,但是当我将函数分配给数组时(在类的默认构造函数中),我收到了错误消息:
“void (GameObject::*)()”不能用于初始化“AlarmFunction”类型的实体
处理这个的所有代码如下,这个都在头文件中:
#include "stdafx.h"
#include <Windows.h>
typedef int (*AlarmFunction) ();
class GameObject
{
protected:
GameObject()
{
AlarmFunction alarmF[12] =
{
AlarmEvent1,
AlarmEvent2,
AlarmEvent3,
AlarmEvent4,
AlarmEvent5,
AlarmEvent6,
AlarmEvent7,
AlarmEvent8,
AlarmEvent9,
AlarmEvent10,
AlarmEvent11,
AlarmEvent12
};
}
//private default constructor
~GameObject();
int instance_id;
int object_id;
int alarm[12];
void AlarmEvent1();
void AlarmEvent2();
void AlarmEvent3();
void AlarmEvent4();
void AlarmEvent5();
void AlarmEvent6();
void AlarmEvent7();
void AlarmEvent8();
void AlarmEvent9();
void AlarmEvent10();
void AlarmEvent11();
void AlarmEvent12();
AlarmFunction alarmF[12];
public:
void AlarmTick()
{
for (int i=0;i<=11;i++)
{
if (alarm[i] > -1)
{
alarm[i]--;
}
else
{
if (alarm[i] == 0)
{
alarmF[i]();
}
}
}
}
我在网上找不到太多关于这个错误或如何修复它的信息,如果有人能为我解释这个错误,我将不胜感激。
那是因为您试图将指向成员函数的指针分配给指向自由函数的指针类型的字段。 它们是不兼容的类型。
我不确定确切的语法,因为我不必处理指向成员函数的原始指针(无论如何, std::function
在大多数情况下都更好),但是您可以尝试这样的操作,看看它是否有效。
class GameObject;
typedef int (GameObject::*AlarmFunction) ();
就像@Antimony 所说的,这些类型是不兼容的。
你可以做的是类似的事情:
而不是声明 void 函数
void AlarmEvent1();
void AlarmEvent2();
void AlarmEvent3();
void AlarmEvent4();
void AlarmEvent5();
void AlarmEvent6();
void AlarmEvent7();
void AlarmEvent8();
void AlarmEvent9();
void AlarmEvent10();
void AlarmEvent11();
void AlarmEvent12();
您可以按如下方式声明它们:
int AlarmEvent1() {return 1};
int AlarmEvent2() {return 1};
int AlarmEvent3() {return 1};
int AlarmEvent4() {return 1};
//So on
这样,您可以将它们添加到您的数组中并使用它们。
我还没有尝试编译它,但它应该可以工作,或者至少你的方向就在那里。
如果我错了,请纠正我。
我对 C++ 了解不多,但我在用 C 编码时也遇到了和你一样的问题,我没有将函数名传递给函数数组,而是将函数的地址存储在数组中,然后我使用调用函数的数组指针
int test1()
{
printf("hello\n");
return 0;
}
int test2()
{
printf("world\n");
return 1;
}
int main()
{
int n = -15;
int (*(functions[2]))() = {test1, test2};
n = functions[0]();
printf("%d\n", n);
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.