[请教] C++ 高手

看你就烦

新手上路
注册
2003-02-21
消息
851
荣誉分数
0
声望点数
0
下面这段程序有编译错误。
我想在 OnOldProcess() 中 通过函数指针调用成员函数 OldRecordsProcess(). 但编译不能通过
同一函数如果是全局函数,就能编译。请问高手,错在什么地方,怎么修改?

#include <windows.h>
#include <iostream>
#include <fstream>
using namespace std;
class SiteStates
{
};

typedef int (* _PFUNC)(ifstream *ifp, SiteStates **psiteOldStates);

class CPollerAlertApp
{
private:
ifstream ifp;
SiteStates **psiteOldStates; // record previous data records for each sites

public:
CPollerAlertApp(){};
void OnOldProcess();

private:
/*********************************************/
/* functions */
/*********************************************/
/*************** PollerAlert.c ********************/
void RunDataProcess(_PFUNC pfunc);

protected:
int OldRecordsProcess(ifstream *ifp, SiteStates **psiteOldStates);

};

int OldRecordsProcess(ifstream *ifp, SiteStates **psiteOldStates)
{
return(0);
}

/////////////////////////////////////////////////////////////////////////////
// CPollerAlertApp message handlers
void CPollerAlertApp::OnOldProcess()
{
// TODO: Add your command handler code here

RunDataProcess(::OldRecordsProcess);
RunDataProcess(OldRecordsProcess); /* compiler error here */
}

void CPollerAlertApp::RunDataProcess(_PFUNC pFunc)
{
pFunc(&ifp, psiteOldStates);
}

void main()
{
CPollerAlertApp *pApp = new CPollerAlertApp;

pApp->OnOldProcess();
}
 
#include <windows.h>
#include <iostream>
#include <fstream>
using namespace std;
class SiteStates
{
};
class CPollerAlertApp;
typedef int (CPollerAlertApp::* _PFUNC)(ifstream *ifp, SiteStates **psiteOldStates);

class CPollerAlertApp
{
private:
ifstream ifp;
SiteStates **psiteOldStates; // record previous data records for each sites

public:
CPollerAlertApp(){};
void OnOldProcess();

private:
/*********************************************/
/* functions */
/*********************************************/
/*************** PollerAlert.c ********************/
void RunDataProcess(_PFUNC pfunc);

protected:
int OldRecordsProcess(ifstream *ifp, SiteStates **psiteOldStates);

};

int OldRecordsProcess(ifstream *ifp, SiteStates **psiteOldStates)
{
return(0);
}

/////////////////////////////////////////////////////////////////////////////
// CPollerAlertApp message handlers
void CPollerAlertApp::OnOldProcess()
{
// TODO: Add your command handler code here

// RunDataProcess(::OldRecordsProcess);
RunDataProcess(OldRecordsProcess); /* compiler error here */
}

void CPollerAlertApp::RunDataProcess(_PFUNC pFunc)
{
(this->*pFunc)(&ifp, psiteOldStates);
}

void main()
{
CPollerAlertApp *pApp = new CPollerAlertApp;

pApp->OnOldProcess();
}
 
简单的讲原因是你需要使用指向类成员函数的指针,它的定义与使用是与普通的指向函数的指针不一样的。
 
谢谢 dpff,

typedef int (CPollerAlertApp::* _PFUNC)(ifstream *ifp, SiteStates **psiteOldStates);

的定义我在这之前试过. 但没有用

(this->*pFunc)(&ifp, psiteOldStates);

调用. this->* 是什么意思? 既在成员函数里, 为何不能直接用 pFunc 调用?

再有, 编译过了,但 Linker 好像找不到

RunDataProcess(OldRecordsProcess); /* compiler error here */

中的 OldRecordsProcess();
 
->*和.*是C++的类成员指针访问符,它需要前面有类的对象或者指向类对象的指针。因为你的类成员函数不是静态的,前面需要加this。
你的类中的OldRecordsProcess()没有给函数体。
 
后退
顶部