我是函数指针的新手,我写了一个小程序,其中主类使用Test类来填充带有成员函数指针的列表。从我的主类我想调用ExeFuns()来调用每个成员函数,我不知道该怎么做。任何帮助是极大的赞赏。谢谢。
Test.h
Class Test{
public :
void CallFun1();
void CallFun2();
void AddFuns();
void ExeFuns();
};
Test.cpp的
std::vector<void (Test::*) ()> callist;
void Test::AddFuns(){
callist.push_back(&Test::CallFun1);
callist.push_back(&Test::CallFun2);
}
void Test::ExeFuns(){
for (int i = 0 ; i<eventlist.size(); i++)
{
callist[i](); // error!
}
}
void Test::CallFun1(){ cout<<"Fun 1"<<endl; }
void Test::CallFun2(){ cout<<"Fun 2"<<endl; }
Main.cpp的
main()
{
Test obj;
obj.AddFuns();
obj.ExeFuns();
}
答案 0 :(得分:1)
简而言之,您需要。*或 - &gt;运算符调用成员方法。 此外,您的代码中存在多个编译错误和一个超出范围的访问权限。 这是正确的方法,
void Test::ExeFuns(){
for (int i = 0 ; i<callist.size(); i++) // also there is out of bounds access (usage of <=) in your code
{
(this->*callist[i])(); // or (*this.*callist[i])();
}
}
答案 1 :(得分:0)
这些不是指向独立函数的指针,它们是指向类的成员函数的指针。正如克里斯所说,你需要一个物体来打电话给他们。
检查this SO问题。