初始化包含函数指针的结构向量给出 "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 成员的指针。
我正在尝试编写芯片 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 成员的指针。