[英]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.