微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

初始化包含函数指针的结构向量给出“没有可行的重载 '='”

如何解决初始化包含函数指针的结构向量给出“没有可行的重载 '='”

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

没有运算符“=”匹配这些操作数——操作数类型是: std::__1::vector<:somestruct std::__1::allocator>> = {...}

和:

没有可行的重载 '='

对于行 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::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;
    };

因为你试图使用类 A 的成员函数作为初始化器。

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

也就是说,您必须声明指向类成员的指针。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。