I'm trying to deal with an array of functions, however when I assign the functions to the array (in the class's default constructor) I am greeted with the error message:
"void (GameObject::*)()" cannot be used to initialize an entity of type "AlarmFunction""
All code dealing with this is as follows, this is all in the header file:
#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]();
}
}
}
}
I can't find much on the web about this error or indeed how to fix it, and would be grateful if anyone could shed some light on the error for me.
Array Functions in C is a type of data structure that holds multiple elements of the same data type. The size of an array is fixed and the elements are collected in a sequential manner. There can be different dimensions of arrays and C programming does not limit the number of dimensions in an Array.
An array as a function argument.Arrays are always passed-by-pointer to functions, which means that array arguments can pass data into functions, out of functions, or both in and out of functions.
C programming does not allow to return an entire array as an argument to a function. However, you can return a pointer to an array by specifying the array's name without an index.
That's because you're trying to assign a pointer to member function to a field of type pointer to free function. They're incompatible types.
I'm not sure of the exact syntax since I haven't had to deal with raw pointers to member functions (std::function
is better for most cases anyway), but you could try something like this to see if it works.
class GameObject;
typedef int (GameObject::*AlarmFunction) ();
I don't know much about c++ but I also ran into the same problem as you while coding in C and instead of passing the name of functions to an array of functions I stored in the array the addresses of the functions and then I use an array pointer to call the functions
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;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With