初始化包含函数指针的结构向量给出 "no viable overloaded '=' "

Initialising a vector of structs containing function pointers gives "no viable overloaded '=' "

我正在尝试编写芯片 CPU 模拟器并将其指令 table 实现为结构向量,其中每个结构包含一个值和一个指向特定操作的函数指针。然而,我的编译器 (clang++) 给出了错误:

no operator "=" matches these operands -- operand types are: std::__1::vector<A::someStruct, std::__1::allocator<A::someStruct>> = {...}

和:

no viable overloaded '='

对于行 func_table = {{1,&A::func1},{2,&A::func2}};

我使用的语法与 GitHub 上的 similar project 完全相同,但我仍然遇到这些错误。使用非空函数指针的结构初始化似乎只是一个问题。我对使用 C++ 编程很陌生,所以我很想知道我误解了什么。下面是头文件和源文件的示例

#include <vector>

class A{

    public:
        A();
        
    private:
        
        struct someStruct{
            int a = 0;
            void (*fptr)(void) = nullptr;
        };
        std::vector<someStruct> func_table;

        void func1();

        void func2();

};
#include "tutorial.h"

A::A(){
    func_table = {{1,&A::func1},{2,&A::func2}}; // two entries here, but the table is 512 long
}

void A::func1(){
   // something
}

void A::func2(){
   // something else
}
  
int main(){
    A example;
    return 0;
}

我不明白这些错误是什么意思,也不明白为什么大括号初始化似乎有函数指针问题。我真的很感激任何对此的投入。谢谢

结构定义应该如下所示

    struct someStruct{
        int a = 0;
        void (A::*fptr)(void) = nullptr;
    };

因为您正在尝试使用 class A 的成员函数作为初始值设定项。

A::A(){
    func_table = {{1,&A::func1},{2,&A::func2}};
}

那就是你必须声明指向 class 成员的指针。