我正在尝试用C ++修改和改进作业调度程序应用程序
许多成员函数都声明为static
,因此无法对非静态成员变量起作用。
尝试向类添加其他功能时出现问题。特别是,我想知道是否可以在静态成员函数的定义中调用非静态成员函数。
也就是说,假设我们有成员函数声明:
static void email(CString message);
CRecordset * Select(CString SQL, CDatabase* dataBase);
我想在Select
函数的实现中调用email
函数。但是我收到了一个错误:
error C2352: 'CSchedulerDlg::Select' : illegal call of non-static member function
错误很有意义,因为静态成员函数不能对当前对象起作用,但我仍然需要在Select
函数中执行email
函数。是否存在解决方法?
导致错误的相关代码是:
void CSchedulerDlg::email(CString message)
{
CRecordset * emails = Select("some SQL query", db);
}
其中static CDatabase* db
是类中的私有成员变量。
答案 0 :(得分:0)
为什么不能简单地为Select
函数提供一个对象?
void CSchedulerDlg::email(CString message)
{
CSchedulerDlg aDlg; // Now you have an object.
CRecordset * emails = aDlg.Select("some SQL query", db); // This is now a valid call.
}
答案 1 :(得分:0)
唯一的解决方法是使email
非静态,或将参数CSchedulerDlg&
添加到email
:
static void email(CSchedulerDlg& dlg, CString message);
并在select
对象上调用dlg
。两种解决方案都非常相似。