필자는 헤더 파일에 다음과 같이 선언 된 함수 그룹과 함수 포인터를 가지고 있습니다.이 함수 포인터가 실패하고있는 이유는 무엇입니까?
public: // User declarations
void __fastcall TTopForm::Method1(void);
void __fastcall TTopForm::Method2(void);
void __fastcall TTopForm::Method3(void);
void __fastcall (TTopForm::*Method)(void) ;
그런 다음 내 프로그램에서이 오류 메시지가 생성이
Method = Method1;
수행합니다. "멤버 함수를 호출해야 또는 주소가 촬영을" 물론 이걸 시도해 보지만 행운은 없습니다.
Method = &Method1;
내가 뭘 잘못하고 있니? 나는 회로 전문가이고 코드 전문가는 아니기 때문에 코드를 명시 해주십시오.
답변 해 주셔서 감사합니다. C++ Builder를 사용하고있는 다른 사람들을 위해 내가 한 일을 게시 할 것입니다. 도움말 파일 당 typedef를 사용하고 있습니다. typedef에 __fastcall을 생략하면 내 실수였습니다. 그럼 내 코드에서
class TTopForm : public TForm
{
typedef void (__fastcall TTopForm::* TMethod)(void);
...
public: // User declarations
void __fastcall TTopForm::Method1(void);
void __fastcall TTopForm::Method2(void);
void __fastcall TTopForm::Method3(void);
...
는 :
TMethod Method = &TTopForm::Method1;
(TopForm->*Method)();
주셔서 감사 구문 작품,하지만 지금은 방법()는 "비 함수 호출"오류가 있습니다 : 예를 들어, 다음은 유효합니다. 귀하의 의견에 따라 함수의 인수 목록에 TObject * Sender를 추가하려고 시도했지만 도움이되지 않았습니다. –
코드를 볼 수는 없지만 질문에서'Method'는 멤버 함수에 대한 * 포인터 *입니다. 호출 할 개체를 제공해야합니다. 예를 들어'tTopForm' 타입의 객체't'를 가지고 있다고 가정하면'(t. * Method)();'와 같이 호출 할 수 있습니다. –