예제를 통해 내 질문에 설명해주십시오 (VC++ 코드 VS2013 사용). 이 코드 IN 클래스 멤버 함수 (클래스 B) 클래스를 통해 VC++에서 함수 포인터
void Imhere(int num)
{
printf_s("\n Hello World printed %d\n",num);
}
class Abc;
class Dllclas
{
public:
void dllFunc()
{
printf_s("\n Heelo this is DLl func\n");
}
};
void outsideFunc()
{
printf_s("\n Heelo this is outside func\n");
}
typedef void(*outsideFP)();
typedef void (Dllclas::*funcFP)();
class Abc
{
public:
funcFP fp;
outsideFP outFp;
int a;
void assignOUTFp()
{
outFp = &outsideFunc;
}
void assignFP()
{
fp = &(Dllclas::dllFunc);
}
};
int _tmain(int argc, _TCHAR* argv[])
{
Abc* abcObj1 = new Abc();
abcObj1->a = 7;
abcObj1->assignOUTFp();
abcObj1->outFp(); // THIS FUNCTION CALL WORKS PERFECTLY FINE.
abcObj1->assignFP();
abcObj1->fp(); // COMPILATION ERROR.
, 마지막 줄에
abcObj1-> FP(); // COMPILATION ERROR.
컴파일 오류가 발생합니다.
오류 C2064 : 항은 0 인수
또한
나는 ") (abcObj1-> FP"를 통해 내 마우스를 올려 놓으면, 내가 읽는 빨간색 오류를 복용 함수에 평가하지 않습니다 " 분명 전화의 괄호를 이전
표현은 내가 여기 (포인터 대) 함수 타입
이 있어야합니다 함수를 호출 할 수있다 "abcObj1-> outFp(); 어떤 수업에도 속하지 않습니다. 따라서이 오류가 발생하는 이유는 "abcObj1-> fp();에 현재 함수 주소가 있기 때문입니다." Dllclas 클래스의 클래스 멤버 함수, 즉 "dllFunc()에 속한다. 나는 또한 링크 link에 대해 참조하지만 컴파일 오류를 확인할 수 없습니다
.
나는 코드 샘플에 도움을받을시겠습니까? 미리 감사 제 에러가 제거 괄호로 고정 될 수
'FP'멤버를 찾을 수 없습니다. 'fp'라고 했니? – dasblinkenlight
예, "fp"이고 "FP"(오타)가 아닙니다. 죄송합니다. 지금 바로 수정했습니다. 감사. – codeLover
'fp'는'Dllclas'의 멤버에 대한 포인터입니다. 'Dllclas' 인스턴스없이'dllFunc'를 직접 호출 할 수없는 것처럼 그 멤버를 호출 할'Dllclas' 인스턴스가 필요합니다. –