C ++错误C2352:' CSchedulerDlg ::选择' :非静态调用非静态成员函数

时间:2016-01-12 18:57:26

标签: c++ static-methods static-members

我正在尝试用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是类中的私有成员变量。

2 个答案:

答案 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。两种解决方案都非常相似。