빨강, 녹색 및 파랑의 세 가지 색상 포인트를 추적 중입니다. currentFrames 클래스는 두 프레임 (카메라와 일부 보조 프레임)과 프레임에서 일부 정보를 조작/추출하는 몇 가지 메서드를 포함합니다. 각 점의 중심을 찾을 수 있다고 가정하고이 중심 점의 위치를 기반으로 특정 함수를 호출하려고합니다. 전체 프레임은 그리드로 나뉘며 그리드의 각 세그먼트에는 기능이 할당됩니다.이 특정 세그먼트에서 포인트가 감지되면 해당 기능이 호출됩니다. 이런 식으로 함수의 주소를멤버 함수를 멤버로 호출 할 때 세그먼트 화 오류가 발생했습니다
#define CALL_MEMBER_FN(object,ptrToMember) ((object).*(ptrToMember))
MyFuncPointerType functions[NUMBER_OF_POINTS][NUMBER_OF_SEGMENTS];
을하고 할당 :
functions[0][0] = ¤tFrames::something;
경우, 예를 들면, 첫 번째 점
내 생각 멤버 함수 포인터의 다차원 어레이를 생성하는 것이다 그리드의 두 번째 세그먼트에 위치 할 것이고, 적절한 함수를 호출 할 것입니다. (이것은 currentFrames 클래스 내부에서 호출 될 것입니다.) 그래서 CALL_MEMBER_FN
에 대한 객체로 *this
을 전달하고 있습니다 :
CALL_MEMBER_FN(*this, functions[0][1])();
난 그렇게 복잡하지 예제를 시작했다 - 나는 각 지점에 대해 서로 다른 함수를 호출하기를 원하지만 ("포인트의 범위") 각 세그먼트에 대해 동일합니다 :에,
class currentFrames
{
public:
void someMethod();
private:
void calculateVelocity();
void redPointDetected();
void redPointGone();
typedef void (currentFrames::*MyFuncPointerType)();
MyFuncPointerType functions[];
}
다음 currentFrames의 생성자 나는 다음을 수행하십시오
currentFrames::currentFrames()
{
this->functions[0] = ¤tFrames::calculateVelocity;
this->functions[1] = ¤tFrames::redPointDetected;
}
그럼,이 멤버 함수를 호출하려고 currentFrames 클래스의 것으로 someMethod에서 :
void currentFrames::someMethod()
{
CALL_MEMBER_FN(*this, this->functions[0])();
}
그러나 이것은 나에게 segfault를줍니다. CALL_MEMBER_FN
을 ((ptrToObject)->*(ptrToMember))
으로 정의하려고 시도했지만 segfault도 제공합니다.
어떻게해야합니까? 내가 원하는 것을 얻기위한 더 좋은 방법이 있습니까?
나를 부끄러워하지 말라 - 나는 명백한 오타를 찾을 수 없다면 3am이 프로그래밍을하는 것보다 더 나은 시간 인 것 같다! 고마워요! ;) – jmatraszek