1

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

没有运算符 "=" 匹配这些操作数 -- 操作数类型是:std::__1::vector<A::someStruct, std::__1::allocator<A::someStruct>> = {...}

和:

没有可行的重载'='

为线func_table = {{1,&A::func1},{2,&A::func2}};

我使用的语法与 GitHub 上类似项目中使用的语法完全相同,但仍然出现这些错误。使用非空函数指针的结构初始化似乎只是一个问题。我对使用 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;
}

我不明白这些错误的含义以及为什么大括号初始化似乎与函数指针有问题。我非常感谢您对此的任何意见。谢谢

4

1 回答 1

0

结构定义应如下所示

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

因为您正在尝试使用类 A 的成员函数作为初始化程序。

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

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

于 2021-06-09T13:17:22.147 回答