저는 함수 포인터를 처음 접했고 메인 클래스가 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();
}
간단히 말해서 멤버 메서드를 호출하려면. * 또는-> 연산자가 필요합니다. 또한 코드에 여러 컴파일 오류와 하나의 범위를 벗어난 액세스가 있습니다. 다음은 올바른 접근 방식입니다.
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])();
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다