我在这里声明一个结构,并且在我的课堂上有一个数组。
struct instruction {
std::string disassembly;
unsigned char operandLength;
void* execute;
};
...
class CPU {
private:
struct instruction opcodes[256];
void load_n_to_b(unsigned char arg1); //0x06
void load_c_to_b(); //0x41
...
}
我尝试初始化操作码数组,但始终收到有关“指令的初始化程序太多”或类型从“ void(*)(unsigned char)”类型转换为“ void *”的类型无效的错误。因为这些函数可以有0个参数或1个参数,所以我不知道如何使其在C ++中工作。
我正在像下面这样初始化它们
opcodes[0x06] = instruction{ "LD B, 0x%02X", 1, load_n_to_b };
opcodes[0x41] = instruction{ "LD B, C", 0, load_c_to_b };
答案 0 :(得分:0)
您在void
结构中持有指向instruction
的指针。相反,您需要函数指针。
void (*execute)() ;
它适用于load_c_to_b
,因为它的参数也是void
。但是,我更喜欢void (*execute)(void*)
,因为如果我需要一个参数,可以通过强制转换使用它,否则,请忽略它。